Возможное простое решение - вставить начальный и конечный маркеры вокруг текста программы, расширение которого вас интересует.Хотя вы не можете вставлять маркеры с помощью комментариев, вы можете добиться того же эффекта с помощью директив #pragma
, по крайней мере с обычными компиляторами C.
В соответствии со стандартом (§6.10.6) директива прагмы распознается либореализация, а затем имеет поведение, определяемое реализацией (что может привести к сбою компиляции), или оно не распознается реализацией, и в этом случае оно игнорируется.Поскольку поведение, определяемое реализацией, должно быть задокументировано соответствующей реализацией, теоретически должно быть возможно определить, какие прагмы распознаются реализацией, и тогда вы можете использовать все, что не соответствует этому шаблону.На практике это редко бывает так просто, но в общем первый токен, следующий за "#pragma", будет идентифицировать компилятор или подсистему, поэтому большинство прагм, распознаваемых gcc, будут начинаться с токена GCC
.(Тем не менее, существует множество устаревших прагм.)
Так что вам, возможно, придется немного поэкспериментировать, но, по крайней мере, на компиляторах, которые я использовал, строки
#pragma X_PPTRACE 0
и
#pragma X_PPTRACE 1
только что прошел препроцессор (хотя и с предупреждением -Wall
), что позволило создать очень простую программу awk:
gcc -Wall -Wno-unknown-pragmas -E ... |
awk '/#pragma[[:space:]]+X_PPTRACE/{trace=$3;}trace'