Подтвердить что ты не робот

Сбой компиляции, если требуемые флаги отсутствуют

У меня есть код устаревшего кода, которому нужны определенные gcc-флаги. Могу ли я добавить проверки перед процессором для этих флагов?

Например, скажем, мне нужно -fno-strict-aliasing, могу ли я сделать что-то вроде этого:

#ifndef _FNO_STRICT_ALIASING
   #error -fno-strict-aliasing is required!
#endif
4b9b3361

Ответ 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.