क्लैंग का पता लगाने के लिए मैं किस पूर्वनिर्धारित मैक्रो का उपयोग कर सकता हूं?


111

मैं अपने स्रोत कोड को संकलित करने के लिए उपयोग किए गए कंपाइलर का पता लगाने की कोशिश कर रहा हूं। मैं आसानी से पूर्वनिर्धारित मैक्रोज़ को MSVC या GCC के लिए देख सकता हूं (देखें) उदाहरण के लिए http://predef.sourceforge.net/ ) के लिए सकता हूं, लेकिन मुझे क्लैग की जांच करने के लिए कोई मैक्रो नहीं मिल सकता है।

क्या कोई जानता है कि अगर कोई मैक्रो को परिभाषित करता है __CLANG__, ताकि यह पता चल सके कि वर्तमान में मेरा कोड क्या है?



जवाबों:


120

सभी पूर्वनिर्धारित मैक्रो की एक सूची प्राप्त करने के लिए जो संकलक उपयोग करता है, इसका उपयोग करें:

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

आप gcc के लिए भी ऐसा कर सकते हैं।



41

इस सवाल का जवाब सालों से दिया जा रहा है लेकिन मैं इसे भविष्य के संदर्भ में जोड़ दूंगा कि यह विंडोज में कैसे किया जाता है :

echo | clang -dM -E -

जीसीसी के लिए समान:

echo | gcc -dM -E -

कृपया ध्यान दें: अंतिम डैश -वास्तव में महत्वपूर्ण है! (अन्यथा आप error: no input filesदोनों संकलक के लिए)


8
FYI करें, विंडोज समतुल्य /dev/nullहैNUL:
वैध करें

@ ग़ुलाम करो वाह! मुझे नहीं पता था कि! यह बहुत मजेदार है; आपको वह कहां मिलेगा?
एमडी एक्सएफ

4
यह डॉस दिनों से है, बस ज्यादातर डॉस / विंडोज यूजर्स को कभी इसकी जरूरत नहीं पड़ी।
वैध

यह वही है जो मैं आमतौर पर लिनक्स में भी करता हूं। टाइपिंग /dev/nullअधिक काम है।
पीटर कॉर्ड्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.