Скажем, у нас есть main.c:Как установить глубину gcc -E (уровень предварительной обработки)?
#define f() { \
foo(); \
bar(); \
}
#define F() { \
f(); \
f(); \
}
F();
Теперь, если мы gcc -E main.c -o main.i
, в main.i есть:
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"
# 11 "main.c"
{ { foo(); bar(); }; { foo(); bar(); }; };
Что делать, если я не хочу внутренние макросы (например, f()
) быть расширен. Как я могу получить что-то вроде:
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"
# 11 "main.c"
{ f(); f(); };
Также, если возможно, то как я могу настроить глубину расширения?
Возможно возможное обходное решение, только если вам разрешено изменять исходный код (и даже в этом случае его все равно будет сложно применить в больших проектах), нужно было бы ввести правильный '#undef f' в подходящие местоположения, возможно, в каком-либо блоке '# ifdef'-' # endif', чтобы легко активировать/отключить через командную строку (через '-D'). Однако это все равно не будет работать во всех случаях. – chrk