Могу ли я увидеть определенные макросы во время компиляции кода C? - PullRequest
8 голосов
/ 19 февраля 2010

У меня есть фрагмент кода, который без проблем компилируется с x86 gcc 4.4.1, но не работает с blackfin gcc 4.1.2 со многими ошибками «ожидаемый неквалифицированный идентификатор перед числовой константой». Я вижу, что есть некоторые имена переменных, которые конфликтуют с некоторыми предопределенными макросами. Можно ли увидеть определенные макросы в определенной строке файла cpp?

1 Ответ

11 голосов
/ 19 февраля 2010
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 через стандартный ввод).

...