2013-01-31 61 views
14

मैं एक कस्टम त्रुटि संदेश के साथ अपने सी ++ कोड में एक संकलन-समय त्रुटि बनाना चाहता हूं। मैं इसे दो कारणों से करना चाहता हूं:मैं सी ++ में संकलन त्रुटि को कैसे मजबूर कर सकता हूं?

  • संकलन को मजबूर करने के लिए मजबूर करने के लिए, जबकि मैं नई सुविधाओं पर काम कर रहा हूं जो अभी तक लागू नहीं किए गए हैं। (समय संकलित करें! TODO अनुस्मारक)
  • असमर्थित टेम्पलेट विशेषज्ञता को कार्यान्वित करने का प्रयास करते समय अधिक पढ़ने योग्य त्रुटि बनाने के लिए।

मुझे यकीन है कि ऐसा करने के लिए एक चाल है लेकिन मुझे विधि को समझाने वाला संसाधन नहीं मिल रहा है। मैं कोड COMPILE_FAIL ("त्रुटि संदेश") के # परिभाषा में कोड लपेटूंगा;

धन्यवाद डी

+2

आपको क्या करना होगा 'static_assert' है। http://stackoverflow.com/questions/6765770/compile-time-assertion – legends2k

+0

क्या आपने # आतंक का प्रयास किया? – thang

+0

static_assert पूरी तरह से msvc10 पर काम करता है ... :-) –

उत्तर

32

उपयोग #error:

#error "YOUR MESSAGE" 

यह पूर्वप्रक्रमक से एक त्रुटि पैदा करता है। यदि आप बाद के चरण में एक त्रुटि का पता लगाना चाहते हैं (उदाहरण के लिए टेम्पलेट प्रसंस्करण के दौरान), static_assert (एक सी ++ 11 सुविधा) का उपयोग करें।

#error "You ain't finished this yet!" 
5

एक संकलक त्रुटि (जीसीसी, बजना शैली) बाध्य करने के लिए।

उदाहरण:

#include <iostream> 
#include <type_traits> 

template<typename T> 
class matrix { 
    static_assert(std::is_integral<T>::value, "Can only be integral type"); 
}; 

int main() { 
    matrix<int*> v; //error: static assertion failed: Can only be integral type 
}