2011-03-16 19 views

उत्तर

28

यह एक प्रीप्रोसेसर निर्देश है जिसका उपयोग किया जाता है (उदाहरण के लिए) जब आप कई संभावित -D प्रतीकों को परिभाषित करने की अपेक्षा करते हैं, लेकिन कोई भी नहीं है।

#if defined(BUILD_TYPE_NORMAL) 
# define DEBUG(x) do {;} while (0) /* paranoid-style null code */ 
#elif defined(BUILD_TYPE_DEBUG) 
# define DEBUG(x) _debug_trace x /* e.g. DEBUG((_debug_trace args)) */ 
#else 
# error "Please specify build type in the Makefile" 
#endif 

जब पूर्वप्रक्रमक #error निर्देश मारता है, यह एक त्रुटि संदेश और पड़ाव संकलन के रूप में स्ट्रिंग रिपोर्ट करेंगे; त्रुटि संदेश कैसा दिखता है वास्तव में संकलक पर निर्भर करता है।

+2

के लिए एक प्रश्न की तरह लगता है कि यह एक पागल नल स्टेटमेंट है ... –

+1

क्या यह कहना उचित नहीं होगा कि यह प्रीप्रोकैसिंग रोकता है? मुझे लगता है कि प्रीप्रोकैसिंग को संकलन में एक चरण के रूप में देखा जा सकता है, लेकिन यह निश्चित रूप से एक अलग चरण के रूप में किया जा सकता है, और आंतरिक रूप से एक अलग चरण के रूप में किया जाता है, इसलिए यह संकलन त्रुटि से पहले घातक त्रुटि को विफल/रिपोर्ट करता है। – RastaJedi

12

मैं अमान्य कोड, लेकिन इसके कुछ की तरह हो सकता है ...

#if defined USING_SQLITE && defined USING_MYSQL 
#error You cannot use both sqlite and mysql at the same time 
#endif 

#if !(defined USING_SQLITE && defined USING_MYSQL) 
#error You must use either sqlite or mysql 
#endif 


#ifdef USING_SQLITE 
//... 
#endif 

#ifdef USING_MYSQL 
//... 
#endif 
4

संकलक इस लाइन को संकलित करता है तो यह एक संकलक गंभीर त्रुटि दिखाता है: और इस कार्यक्रम के आगे संकलन रोक:

#include<stdio.h> 
#ifndef __MATH_H 
#error First include then compile 
#else 
int main(){ 
    float a,b=25; 
    a=sqrt(b); 
    printf("%f",a); 
    return 0; 
} 
#endif 

Output:compiler error --> Error directive :First include then compile 
संबंधित मुद्दे