2009-06-08 17 views
41

की प्रीप्रोसेसर परीक्षण परिभाषा मैंने साइट की खोज की लेकिन मुझे वह जवाब नहीं मिला जो मैं ढूंढ रहा था, इसलिए यहां वास्तव में एक त्वरित प्रश्न है।सी एकाधिक मैक्रोज़

मैं उस तरह कुछ करने के लिए कोशिश कर रहा हूँ:

#ifdef _WIN32 || _WIN64 
    #include <conio.h> 
#endif 

मैं ऐसी बात कैसे कर सकते? मुझे पता है कि _WIN32 को 32 और 64 बिट विंडोज दोनों के लिए परिभाषित किया गया है, इसलिए मैं विंडोज़ पहचान के लिए ठीक हूं। मुझे इस बात में अधिक दिलचस्पी है कि क्या मैं लॉजिकल ऑपरेटरों का उपयोग प्रीप्रोसेसर निर्देशों के साथ कर सकता हूं, और यदि हां, तो उपर्युक्त काम नहीं करता है।

जीसीसी के साथ संकलन मैं:

चेतावनी: #ifdef निर्देश के अंत में अतिरिक्त टोकन, और यह मूल रूप से सिर्फ पहली मैक्रो लेता है और बाकी ध्यान नहीं देता।

उत्तर

63

कोशिश एक भी बयान होने के रूप में इसके बारे में सोचें:

#if defined(_WIN32) || defined(_WIN64) 
// do stuff 
#endif 

defined मैक्रो परीक्षण किया जाए या नहीं एक नाम परिभाषित और आप परिणाम के लिए तार्किक ऑपरेटरों लागू कर सकते हैं है ।

+1

कंस्ट्रैसिस वैकल्पिक हैं –

+1

धन्यवाद, आप सही थे। ठीक वही जो मेरे द्वारा खोजा जा रहा था। यह ठीक काम करता है :) – Lefteris

3

आप का उपयोग करना चाहिए 'अगर परिभाषित' नहीं बल्कि 'ifdef'

#if defined _WIN32 || defined _WIN64 

उफ़ टाइपो से, आप की जरूरत दूसरा 'परिभाषित' है यही कारण है कि अपने परीक्षण में विफल रहा है। 'परिभाषित _WIN32' लौटने सही/गलत

+2

कोष्ठक हैं वैकल्पिक, लेकिन दूसरा परिभाषित नहीं है। :) –

+0

क्षमा करें - especialy के रूप में ओपी कोड के साथ वास्तव में क्या गलत था! –

3

मुझे लगता है कि यह इस तरह से संभव हो जाना चाहिए:

#if defined block1 || defined block2 /*or any other boolean operator*/ 
    /*Code*/ 
#endif 

अधिक जानकारी here

6

आप का उपयोग करना चाहिए #if और विशेष ऑपरेटर defined

0

उपयोग परिभाषित:

#if defined(A) || defined(B) 
    #include <whatever.h> 
#endif 
संबंधित मुद्दे