Препроцессор GCC
Возможный дубликат:
Запуск препроцессора GCC
Есть ли опция GCC, чтобы препроцессор GCC генерировал исходный код C, но отфильтровывал ненужный исходный код
Например, файл C имеет #define switch
для определения для многих разных платформ. Я только заинтересован в одной платформе, поэтому я хочу, чтобы препроцессор C отфильтровывал несвязанный код. Поддерживает ли GCC это?
Ответы
Ответ 1
Используйте gcc -E
только для запуска части препроцессора, например. укажите файл in.c
#if 0
0;
#endif
#if 1
1;
#endif
работает
$ gcc -E in.c -o in.i
выводит файл in.i
# 1 "in.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "in.cpp"
1;
то есть. части за #if 0
удалены. Если бы у вас были файлы #include
'd, они также были бы вставлены, поэтому я не уверен, насколько это поможет.
Ответ 2
Похоже, вы действительно хотите unifdef, а не препроцессор GCC.
Ответ 3
Да - почти наверняка ваш компилятор предоставляет определенные определения по умолчанию в среде, которые вы можете использовать для включения и отключения кода для разных систем. __GNUC__
является хорошим для GCC. Например:
#ifdef __GNUC__
#define SOME_VALUE 12
#else
#define SOME_VALUE 14
#endif
Если вы скомпилируете этот блок с помощью GCC, SOME_VALUE
будет 12
, а если вы скомпилируете с MSVC, например, SOME_VALUE
будет 14. Список определений для конкретной платформы доступен в этот вопрос.
Ответ 4
Вероятно, вы можете использовать:
gcc -CC -P -Uswitch -undef -nostdinc -fdirectives-only -dDI -E
С switch
#define
вы знаете, будет undefined.