문제

소스 파일 (*.c)에서 매크로를 사용하고 있습니다.

컴파일 동안 또는 라이브러리 에서이 특정 매크로가 해결되는 정확한 헤더 파일을 식별 할 수있는 방법이 있습니까?

문제는 일부 헤더 파일에서 10으로 정의 된 매크로를 사용하고 있지만 코드에서 수신되는 값은 4입니다. 따라서 모든 DEP 파일을 가서 확인하는 대신 매크로가 해결 된 소스를 식별 할 수있는 직접적인 방법이 있음을 알고 싶습니다.

도움이 되었습니까?

해결책

파일에서 CPP (C Preprocessor)를 방금 실행하는 경우 출력에는 양식의 #line 지시문이 포함됩니다.

#line 45 "silly-file-with-macros.h"

컴파일러가 모든 것이 어디에서 왔는지 말하는 것. 한 가지 방법은 사용하는 것입니다

 cpp my-file.c | more

그리고 #line 지령.

컴파일러에 따라 사용할 수있는 또 다른 트릭은 매크로를 다른 것으로 재정의하는 것입니다.

test-eof.c:5:1: warning: "FRED" redefined
test-eof.c:3:1: warning: this is the location of the previous definition

(이것은 GCC에서 나온 것입니다) 매크로가 이전에 정의 된 위치를 알려 주어야합니다. 그러나 그것을 생각해보십시오. 어떻게 그 경고를받지 못한가?

또 다른 아이디어는 사용하는 것입니다 makedepend 포함 된 모든 파일의 목록을 얻으려면 #define 그들 안에 줄.

다른 팁

#Define에 대한 Grep?

find / -name '*.h' | xargs -L 100 grep -H macroname

거기에는 세 가지 명령이 있습니다. 찾기 명령은 검색 할 파일을 선택하여이를 변경할 수 있습니다..c '또는'.cpp '또는 필요한 모든 것. 그런 다음 XARGS 명령은 파일 목록을 한 번에 100으로 나누어 내부 쉘 명령 버퍼 크기를 넘치지 않도록합니다. 그런 다음 GREP 명령은 각 100 파일 목록에서 반복적으로 실행되며 마카Name이 포함 된 파일 이름과이를 사용하는 코드 라인을 인쇄합니다.

이것으로부터 당신은 그것이 재정의되는 위치를 볼 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top