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?

Pierre Bourdon
sumber

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.

Chris Suter
sumber
79

Temukan jawabannya menggunakan strings+ grep:

$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__
Pierre Bourdon
sumber
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)

Bernd Elkemann
sumber
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