Инструмент / Парсер для операторов препроцессора #if? - PullRequest
7 голосов
/ 04 ноября 2010

Я работаю над многими файлами C-исходного кода, которые содержат много операторов препроцессора #if, #elseif и #else.

Это утверждение часто проверяется на #define, например,

#if(Switch_TestMode == Switch_TestModeON)
/* code 1 */
#else
/*code 2 */
#endif

Часто эти операторы препроцессора находятся внутри операторов c-if, что делает исходный код почти нечитаемым для людей.

#define, используемые для этого препроцессора #if операторы определены в дополнительном файле.

Моя идея сейчас состоит в том, чтобы иметь инструмент, который проверяет настройки переключателя #define d, а затем копирует только строки исходного кода, которые применяются с использованием текущих # define / switch settings.

В приведенном выше примере я хотел бы получить новый файл .c, который содержит только

/*code 2 */

предполагается, что #define из Switch_TestMode не равно Switch_TestModeON.

Существуют ли инструменты (бесплатные || недорогие), которые выполняют эту работу? Или я должен написать свой собственный анализатор препроцессора для этого?

(Я не могу запустить компилятор, используя специальный параметр, который выполняет эту работу, потому что наша компания создает C-исходный код, а другая компания компилирует.)

Спасибо за любую подсказку!

Привет

Thomas

Ответы [ 4 ]

3 голосов
/ 04 ноября 2010

unifdef доступен с http://dotat.at/prog/unifdef/.

2 голосов
/ 04 ноября 2010

Попробуйте Sunifdef

Редактировать: который теперь стал Коан

1 голос
/ 04 ноября 2010

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

1 голос
/ 04 ноября 2010

Вы можете запустить компилятор GNU, используя опцию командной строки -E для выполнения предварительной обработки.

http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

...