#c #debugging #c-preprocessor
#c #отладка #c-препроцессор
Вопрос:
В моем файле C у меня есть
#ifdef DEBUG
then blah
#else
blooh.
Я хочу удалить весь текст, который не компилируется после предварительной обработки, так что, если DEBUG
не определено, тогда все операторы вида:
#ifdef DBUG
/* some debug code */
#endif
удаляется из исходного кода.
РЕДАКТИРОВАТЬ: вот пример :
#include <iostream>
//#define DEBUG
int main(){
#ifdef DEBUG
cout << "In debugn";
#endif
cout << "hellon";
return 0;
}
И после запуска скрипта вывод должен быть
#include <iostream>
//#define DEBUG
int main(){
cout << "hellon";
return 0;
}
Комментарии:
1. разве это не то, что делает препроцессор?
2. Нет. Я полагаю, что OP не хочет
#define
, чтобы символы d заменялись, другие#ifdef
оценивались,#include
вставлялись s и т. Д.
Ответ №1:
Недостаточно ли просто запустить препроцессор? Например g -E
?
Комментарии:
1. Я только что попробовал, но он также генерирует код stl. Чтобы быть более понятным, я просто хочу тот же CPP без сгенерированного stl кода, но только удален код под #ifdef .
Ответ №2:
Просто запустите препроцессор вашего компилятора с соответствующими defines . В Windows это было бы cl /EP file
и в Linux gcc -E
. Скорее всего, вам также придется передать свои определения, используя -DFoo
.
Ответ №3:
Я не знаю ответа на ваш вопрос, но Google знает:
- Частичный препроцессор для C
- cpp-partial — частичный вычислитель директивы препроцессора
Ответ №4:
Это делает препроцессор.
Вы можете использовать g -E somefile.cpp
, чтобы увидеть, что он генерирует.