В MSVC & C#, #pragma region
можно использовать для обозначения кода.
Аналогичным образом, в GCC/Clang, #pragma mark
можно выполнить то же самое.Кросс-платформенный код метки макроса?
Можно ли определить один макрос, такой как CODELABEL(label)
, который будет работать для обоих компиляторов?
В принципе, я хотел бы избежать того, чтобы сделать следующее:
#ifdef _WIN32
#pragma region Variables
#else
#pragma mark Variables
#endif
bool MyBool;
int MyInt;
#ifdef _WIN32
#pragma region Methods
#else
#pragma mark Methods
#endif
void MyMethod();
void AnotherMethod();
... и вместо этого сделать что-то вроде этого:
CODELABEL(Variables)
bool MyBool;
int MyInt;
CODELABEL(Functions)
void MyMethod();
void AnotherMethod();
что-то подобное возможно?
Это кажется, что это должно работать, но MSVC дает мне 'ошибка C2059: синтаксическая ошибка:«string'', где 'CodeLabel (MyLabel)' используется – RectangleEquals
@RectangleEquals , Не заглядывая слишком далеко, я думаю, что '_Pragma' не поддерживается (даже с/Za, в отличие от [альтернативных токенов] (http://stackoverflow.com/a/24414420/962089)), но у него были свои собственные '__pragma', так что работает. – chris
Да, это изменение, похоже, сделало трюк. Тем не менее, не тестировалось в OSX. – RectangleEquals