сбой компиляции, если требуемые флаги отсутствуют - PullRequest
12 голосов
/ 22 сентября 2011

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

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

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

Ответы [ 2 ]

6 голосов
/ 22 сентября 2011

Вы можете использовать

#pragma GCC optimize "no-strict-aliasing"

чтобы скомпилировать файл с этим флагом (переопределяя то, что было указано в командной строке). Вы также можете использовать

__attribute__((optimize("no-strict-aliasing")))

чтобы применить флаг к одной функции в исходном файле ...

3 голосов
/ 22 сентября 2011

Определенно нет #define для него, по крайней мере, в моей версии GCC.

Чтобы увидеть все предопределенные символы препроцессора:

g++ -dM -E - < /dev/null

Я не думаю, что есть какой-либо способчтобы проверить эти варианты.Однако, если вы используете GCC 4.4 или более позднюю версию, вы можете использовать атрибут «optimize» функции или «optimize» # pragma , чтобы включить определенные параметры для каждой функции или для каждой функции.-file основе.

Например, если вы добавите это к общему файлу заголовка:

#if defined(__GNUC__)
#pragma GCC optimize ("no-strict-aliasing")
#else
#error "You are not using GCC"
#endif

... он должен включить опцию для каждого файла, который включает заголовок.

[обновление]

ОК, поэтому мне понадобилось около 10 минут, чтобы написать этот ответ.Я все равно оставлю это здесь для ссылок на документы GCC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...