2010-02-19 5 views
8

x86 gcc 4.4.1에서 문제없이 컴파일하는 코드 조각이 있지만 "상수가 아닌 숫자가 올 것으로 기대되는 많은 상수"오류가있는 blackfin gcc 4.1.2와 함께 실패합니다. 일부 미리 정의 된 매크로와 충돌하는 변수 이름이 있음을 알 수 있습니다. cpp 파일의 특정 줄에 정의 된 매크로를 볼 수 있습니까?C 코드를 컴파일하는 동안 정의 된 매크로를 볼 수 있습니까?

답변

11
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로 전달됩니다). stdin).

관련 문제