回答
它使編譯器(或預處理器)輸出錯誤消息。在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. 如何讓Creative Cloud(CC)在優勝美地工作?
- 3. Animate中的「靜音全部」操作CC
- 4. 調試器中的「cc」操作碼
- 5. CC部分不能在PHP郵件功能中工作
- 6. 如何讓f.text_field + 「<div>there is a error</div>」 工作
- 7. signalr stockticker示例不工作 - javascript error
- 8. 如何在MailComposerViewController中刪除cc,bcc?
- 9. Piet中DP和CC如何變化?
- 10. 如何在Dreamweaver CC 2017中安裝Emmet.zxp?
- 11. 什麼是「var cc = cc = cc || {};」在Cocos2D中做什麼?
- 12. touchstart事件不IPAD使用動畫CC JavaScript的工作
- 13. flash cc createjs hittest作品沒有命中
- 14. (Adobe Acrobat CC)如果在計算中的聲明不起作用
- 15. 用法:cc [options]文件。使用'cc -flags'作爲細節
- 16. CC和BCC不工作我不能貫穿其中的一個發送
- 17. 動畫CC javascript按鈕不能一直工作?
- 18. asp.net BCC MAILMESSAGE和CC將無法正常工作
- 19. ftp *。[cC] [sS] [vV]在Windows上無法正常工作
- 20. 如何處理python中的「urlopen error」?
- 21. Adobe Animate中的AS3 CC
- 22. Scala中的「call-cc」模式?
- 23. 如何獲得固定大小的水印,使用Adobe水印CC,在Photoshop CC?
- 24. 如何告訴CPAN關於製作路徑和cc
- 25. BuddyPress中的操作如何工作?
- 26. Unity3D中的靜態批量工作如何在Unity3D中工作
- 27. 如何從C中的工作簿中刪除空工作表#
- 28. Android的工作室 - 按鈕的onclick在片段ERROR
- 29. Firefox性能工具中的「CC Graph Reduction」是什麼意思?
- 30. .remove()不是Photoshop CC 2017中的函數錯誤ExtendScript工具包
你是什麼意思的「只有特定的宏組合定義」。你能引用一個例子嗎?謝謝。 – 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