Makro standar apa yang dapat saya gunakan untuk mendeteksi dentang?


111

Saya mencoba mendeteksi kompiler yang digunakan untuk mengkompilasi kode sumber saya. Saya dapat dengan mudah menemukan makro yang telah ditentukan untuk memeriksa MSVC atau GCC (lihat http://predef.sourceforge.net/ misalnya), tetapi saya tidak dapat menemukan makro untuk memeriksa adanya dentang.

Apakah seseorang tahu jika clang mendefinisikan makro seperti __CLANG__untuk mengetahui apa yang sedang menyusun kode saya?



Jawaban:


120

Untuk mendapatkan daftar semua makro yang telah ditentukan yang digunakan compiler, gunakan ini:

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

Anda dapat melakukan hal yang sama untuk gcc.


79

Temukan jawabannya menggunakan strings+ grep:

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

41

Pertanyaan ini telah dijawab selama bertahun-tahun tetapi izinkan saya menambahkan (untuk referensi di masa mendatang) bagaimana hal itu dilakukan di Windows :

echo | clang -dM -E -

sama seperti untuk GCC:

echo | gcc -dM -E -

Harap diperhatikan: Tanda hubung terakhir -sebenarnya penting! (Jika tidak, Anda akan mendapatkan error: no input fileskedua kompiler)


8
FYI, setara dengan Windows /dev/nulladalahNUL:
melegalkan

@legalize Whoa! Saya tidak tahu itu! Itu sangat keren; dimana kamu menemukan itu?
MD XF

4
Sudah ada sejak hari-hari DOS, hanya sebagian besar pengguna DOS / Windows tidak pernah membutuhkannya.
melegalkan

Inilah yang biasanya saya lakukan di Linux juga. Mengetik /dev/nulllebih banyak pekerjaan.
Peter Cordes
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.