gcc -dM -E myfile.cpp
Переключатель -dM
указывает GCC сбросить все макросы, определенные в данном файле (он будет содержать список макросов, которые должны быть определены стандартом языка, а также любые дополнительные макросы, которые GCC определяет сам).
Переключатель -E
указывает GCC не продолжать компиляцию после предварительной обработки файла.
Чтобы увидеть список макросов, определенных в данной строке файла cpp, может быть проще сначала отфильтровать любой из предопределенных макросов (макросов, определенных компилятором). В BASH вы можете сделать:
LINE=40
FILE=myfile.cpp
HEADER=myfile.h
diff <(grep -h '#include[[:space:]]*<.*>' ${FILE} ${HEADER} | gcc -dM -x c++ -E -) <(cat ${FILE} | head -n ${LINE} | gcc -x c++ -dM -E -)
Это должно отфильтровать все макросы, определенные стандартными системными заголовками или структурами. Дополнительная часть, -x c++
, говорит GCC интерпретировать ввод как источник C ++ [который требует предварительной обработки], это потому, что он не сможет определить его по расширению имени файла (исходный код передается GCC через стандартный ввод).