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


111

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

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



답변:


120

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

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

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


79

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

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

41

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

echo | clang -dM -E -

GCC와 동일 :

echo | gcc -dM -E -

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


8
참고로, Windows에 해당하는 /dev/nullisNUL:
2011

@legalize 우와! 나는 그것을 몰랐다! 꽤 괜찮은데; 어디서 찾았 어?
MD XF

4
DOS 시대 이후로 존재 해 왔으며 대부분의 DOS / Windows 사용자에게는 필요하지 않았습니다.
합법화

이것이 제가 보통 리눅스에서도하는 일입니다. 타이핑 /dev/null은 더 많은 작업입니다.
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.