[c] clang을 감지하는 데 사용할 수있는 사전 정의 된 매크로는 무엇입니까?

내 소스 코드를 컴파일하는 데 사용되는 컴파일러를 감지하려고합니다. MSVC 또는 GCC ( 예 : http://predef.sourceforge.net/ 참조)를 확인하기 위해 미리 정의 된 매크로를 쉽게 찾을 수 있지만 clang을 확인할 매크로를 찾을 수 없습니다.

clang __CLANG__이 현재 내 코드를 컴파일하고 있는지 알기 위해 매크로가 매크로를 정의하는지 누군가 알고 있습니까?



답변

컴파일러가 사용하는 모든 사전 정의 된 매크로 목록을 얻으려면 다음을 사용하십시오.

clang -dM -E -x c /dev/null

gcc에 대해서도 똑같이 할 수 있습니다.


답변

strings+를 사용하여 답을 찾았습니다 grep.

$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__


답변

이 질문에 대한 답변은 수년 동안 이루어졌지만 Windows 에서 수행되는 방법을 나중에 참조 할 수 있도록 추가하겠습니다 .

echo | clang -dM -E -

GCC와 동일 :

echo | gcc -dM -E -

참고 : 마지막 대시 -는 실제로 중요합니다! (그렇지 않으면 error: no input files두 컴파일러 모두 얻을 수 있습니다 )


답변