Сбой компиляции, если требуемые флаги отсутствуют
У меня есть код устаревшего кода, которому нужны определенные gcc-флаги. Могу ли я добавить проверки перед процессором для этих флагов?
Например, скажем, мне нужно -fno-strict-aliasing
, могу ли я сделать что-то вроде этого:
#ifndef _FNO_STRICT_ALIASING
#error -fno-strict-aliasing is required!
#endif
Ответы
Ответ 1
Вы можете использовать
#pragma GCC optimize "no-strict-aliasing"
чтобы скомпилировать файл с этим флагом (переопределив то, что было указано в командной строке).
Вы также можете использовать
__attribute__((optimize("no-strict-aliasing")))
применить флаг к одной функции в исходном файле...
Ответ 2
Определенно нет #define для него, по крайней мере, в моей версии GCC.
Чтобы просмотреть все предопределенные символы препроцессора:
g++ -dM -E - < /dev/null
Я не думаю, что есть какой-либо способ проверить эти параметры. Однако, если вы используете GCC 4.4 или более позднюю версию, вы можете использовать атрибут "optimize" или "optimize" #pragma, чтобы включить определенные параметры для каждой функции или для каждого файла.
Например, если вы добавите это в общий файл заголовка:
#if defined(__GNUC__)
#pragma GCC optimize ("no-strict-aliasing")
#else
#error "You are not using GCC"
#endif
... он должен включить параметр для каждого файла, который включает заголовок.
[обновление]
ОК, поэтому мне потребовалось около 10 минут, чтобы составить этот ответ. Я собираюсь оставить его здесь в любом случае для ссылок на документы GCC.