#ifdef

2009-08-05 9 views
8

के साथ कंपाइलर का पता लगाएं मैं एक छोटा कोड बनाने की कोशिश कर रहा हूं जो कई प्लेटफॉर्म और कंपाइलर्स में काम करता है। मैं दावाों का उपयोग करता हूं, जिनमें से अधिकांश को बंद कर दिया जा सकता है, लेकिन ओपनएमपी समर्थन के लिए -mp का उपयोग करते हुए पीजीआई के pgicpp के साथ संकलन करते समय, यह स्वचालित रूप से --no_exceptions विकल्प का उपयोग करता है: हर जगह "फेंक" कथन के साथ मेरे कोड में एक घातक कंपाइलर त्रुटि उत्पन्न होती है। ("अपवाद हैंडलिंग के लिए समर्थन अक्षम है")#ifdef

क्या define डी मैक्रो है क्या मैं पीजीआई पर throw स्टेटमेंट्स को छिपाने के लिए परीक्षण कर सकता हूं? मैं आमतौर पर जीसीसी के साथ काम करता हूं, जिसमें GCC_VERSION और इसी तरह की है। मुझे पीजीआई में इन मैक्रोज़ का वर्णन करने वाला कोई दस्तावेज नहीं मिल रहा है।

+0

क्लैंग http://stackoverflow.com/questions/2658461/what-predefined-macro-can-i-use-to-detect-clang | वीसी http://stackoverflow.com/questions/15127522/how-to-ifdef-by-compilertype-gcc-or-vc –

उत्तर

12

Sourceforge पर Pre-defined C/C++ Compiler Macros प्रोजेक्ट पर नज़र डालें।

पीजीआई के कंपाइलर में __PGI मैक्रो है।

इसके अलावा, libnuwen's compiler.hh शीर्षलेख को 'सामान्यीकृत' कंपाइलर संस्करण मैक्रोज़ के सामान्य तरीके के लिए देखें।

+0

दूसरा लिंक मृत है :( –

4

आप को देखने के लिए क्या मैक्रो संकलक द्वारा पूर्वनिर्धारित कर रहे हैं इस कोशिश कर सकते:

pgcc -dM 

हो सकता है कि एक उपयुक्त मैक्रो आप उपयोग कर सकते हैं का पता चलता है।

+1

दरअसल। इसका उत्पादन http://www.pgroup.com/support/tprs_70.htm पर दिखाया गया है, और __PGI (ऊपर उल्लिखित) है, और __PGIC__, __PGIC_MINOR__, और __PGIC_PATCHLEVEL__, जो प्रमुख, मामूली और पैचलेवल भागों को देते हैं कंपाइलर संस्करण संख्या। –

+0

और पार्सर का आनंद डबल अंडरस्कोर ले रहा है और उनके साथ मनोरंजक चीजें कर रहा है। 'पीजीआई' डबल अंडरस्कोर के साथ prefixed है; अन्य तीन दोनों उनके साथ prefixed और suffixed दोनों हैं। –

0

क्या आपने बूस्ट हेडर को देखा है? मान लीजिए कि वे पीजीआई का समर्थन करते हैं, उन्हें इसका पता लगाने का एक तरीका मिल जाएगा। आप इसका इस्तेमाल कर सकते हैं। मैं कहीं boost/config में खोजना शुरू कर दूंगा।

संबंधित मुद्दे