Препроцессор 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.