回答
它使編譯器(或預處理器)輸出錯誤消息。在C++中,它也會使翻譯單元不合格(即導致編譯失敗)。
如果您有幾個可以定義的宏,並且您希望確定只定義了它們的某些組合,那麼如果定義了無效組合,則可以使用#error
導致編譯失敗。
如果您想確保某段代碼從未編譯過(無論出於何種原因),它也會很有用。
下面是GNU的預處理器解釋#error
和#warning
指令的文檔的鏈接:http://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html
特別是:
#error
導致 預處理器報告一個致命錯誤的指令。 形成 行其餘部分的標記#error
被用作 的錯誤消息。
另請參閱this question關於這些指令的可移植性。
'#error'指令是C和C++語言標準的一部分,是完全可移植的。 '#warning'是一個gcc特定的語言擴展。 – 2010-05-08 21:18:53
@詹姆斯,感謝您的澄清。 – UncleZeiv 2010-05-08 21:22:11
用於檢查編譯器設置以及驗證宏值組合。一些隨機的例子:
#if !defined(_DLL)
# error This code will only work properly when compiled with /MD
#endif
#if _WIN32_WINNT < 0x502
# error Sorry, Windows versions prior to XP SP2 are not supported
#endif
#if defined(_APPLE) && defined(_LINUX)
# error Conflicting operating system option selected, choose one.
#endif
你真的在處理最後一個練習嗎?不是用戶的責任不是braindead而不是使用無意義的編譯器標誌?你不能檢查*一切* ... – Thomas 2013-11-26 07:48:14
這只是一個例子。當你有太多的支持電話時,你往往會添加這些東西。舉例來說,Boost充滿了它。 – 2013-11-26 11:02:20
- 1. 時髦的通話/ cc的使用。它是如何工作的?
- 2. 保存的CC不在magento工作
- 3. 如何讓Creative Cloud(CC)在優勝美地工作?
- 4. cc大道PHP集成不工作
- 5. java mail CC和BCC不工作
- 6. Animate中的「靜音全部」操作CC
- 7. 調試器中的「cc」操作碼
- 8. 代碼在瀏覽器中而不是在Dreamweaver CC工作
- 9. CC部分不能在PHP郵件功能中工作
- 10. 如何讓f.text_field + 「<div>there is a error</div>」 工作
- 11. 的PhoneGap(科爾多瓦)的mailto與CC不工作
- 12. 如何在magento中添加bcc或cc
- 13. 如何在Dreamweaver CC 2017中安裝Emmet.zxp?
- 14. 如何在MailComposerViewController中刪除cc,bcc?
- 15. Piet中DP和CC如何變化?
- 16. 什麼是「var cc = cc = cc || {};」在Cocos2D中做什麼?
- 17. signalr stockticker示例不工作 - javascript error
- 18. touchstart事件不IPAD使用動畫CC JavaScript的工作
- 19. flash cc createjs hittest作品沒有命中
- 20. 使用g ++編譯jvmti代理無法工作,但cc工作正常
- 21. 如何在Omnet ++ INET的示例中找到該工具的.cc文件
- 22. (Adobe Acrobat CC)如果在計算中的聲明不起作用
- 23. 用法:cc [options]文件。使用'cc -flags'作爲細節
- 24. 將工作簿中的不同工作表發送到不同的電子郵件+ CC與Outlook簽名
- 25. 如何調試InDesign CC的HTML5擴展?
- 26. 如何在工作中安排工作
- 27. CC和BCC不工作我不能貫穿其中的一個發送
- 28. 動畫CC javascript按鈕不能一直工作?
- 29. asp.net BCC MAILMESSAGE和CC將無法正常工作
- 30. 無法讓Revmob與Flash CC/CS5.5一起工作
你是什麼意思的「只有特定的宏組合定義」。你能引用一個例子嗎?謝謝。 – Moeb 2010-05-08 21:11:02
@cambr:例如,如果你有兩個宏,'DO_X'和'DO_Y',並且你想確保一次只設置一個宏,你可以在'#if(定義的DO_X)中包裝一個'#error'指令)&&(定義DO_Y)'塊。 – 2010-05-08 21:14:55
@cambr:假設貴公司出售Slicer™和Dicer™。這兩種產品都使用'blade.c',但它們通過構建系統傳遞不同的宏以實現稍微不同的功能。然後你可以使用'#if SLICING ... #elif DICING ... #else #error沒有makefile選擇的功能。' – Potatoswatter 2010-05-08 21:35:02