Обычно я делаю это так:
$ gcc -dM -E - < /dev/null
Обратите внимание, что некоторые определения препроцессора зависят от параметров командной строки - вы можете проверить их, добавив соответствующие параметры в приведенную выше командную строку. Например, чтобы узнать, какие опции SSE3 / SSE4 включены по умолчанию:
$ gcc -dM -E - < /dev/null | grep SSE[34]
#define __SSE3__ 1
#define __SSSE3__ 1
, а затем сравните это, когда указано -msse4
:
$ gcc -dM -E -msse4 - < /dev/null | grep SSE[34]
#define __SSE3__ 1
#define __SSE4_1__ 1
#define __SSE4_2__ 1
#define __SSSE3__ 1
Точно так же вы можете видеть, какие параметры отличаются между двумя различными наборами параметров командной строки, например, Определяет препроцессор сравнения для уровней оптимизации -O0
(нет) и -O3
(полностью):
$ gcc -dM -E -O0 - < /dev/null > /tmp/O0.txt
$ gcc -dM -E -O3 - < /dev/null > /tmp/O3.txt
$ sdiff -s /tmp/O0.txt /tmp/O3.txt
#define __NO_INLINE__ 1 <
> #define __OPTIMIZE__ 1