回答
該標準肯定不會招待這樣的功能。
假設您正在使用一個現代的主管編譯器來編譯包含throw
的代碼,那麼編譯器將會報錯。但是,當然,你可以編譯代碼的一部分,但不包含異常,在這種情況下,仍然會拋出異常,但無法捕獲它們(因爲沒有catch
)。所以程序可能會在拋出第一個異常時終止。
如果提供標題,你可以只添加一個虛擬函數具名命名空間:
namespace {
inline void dummy_dummy_my_thing_to_check_exceptions()
{
throw 123;
}
}
甚至從來沒有調用這個函數,它仍然會編譯失敗。我懷疑任何可以讓你關閉異常的編譯器都會接受這樣做的代碼 - 我嘗試過使用g ++ 4.8.2,g ++ 4.6.3,clang ++ 3.6.0(截至三週前)和clang ++ 2.9 。所有在頭文件中給出上述函數的錯誤。如果我刪除-fno-exceptions
,代碼編譯和運行(與終止監守的代碼做throw 1
在功能
總代碼:
XH:
extern int func();
namespace {
inline void dummy_dummy_my_thing_to_check_exceptions()
{
throw 123;
}
}
x.cpp:
int func()
{
throw 1;
}
except.cpp:
#include "x.h"
int main()
{
func();
}
與編譯:
g++ -c except.cpp && g++ except.o x.cpp
或
clang++ -c except.cpp && clang++ except.o
,
但不會編譯:
g++ -c except.cpp -fno-exceptions && g++ except.o x.cpp
或
clang++ -c except.cpp -fno-exceptions && clang++ except.o
。
Your're right ...我使用GCC,MinGW,MinGW W64,CLang和MSVC ...所有這些都編譯我沒有錯誤,如果我嘗試禁用GCC和CLang中的異常,它不會編譯,但在MSVC中,我不想這樣做。這就是問題的原因,檢測異常的禁用並避免編譯。 – yayuj 2014-09-24 23:27:58
- 1. iPhone - 有沒有辦法知道引用是否(仍然)有效?
- 2. 有沒有辦法知道一個對象的C#方法是否被調用?
- 3. 有沒有辦法知道用戶是否發送了短信?
- 4. 有沒有辦法知道Data Saver是否啓用?
- 5. 有沒有辦法知道用戶是否打開郵件?
- 6. 有沒有辦法知道文件名是否是Excel格式?
- 7. 有沒有辦法知道手機是否有通話?
- 8. 有沒有辦法知道timerTask是否已完成?
- 9. 有沒有辦法知道一行是否更新?
- 10. 有沒有辦法知道Flash Player是否安裝了SWFObject?
- 11. 有沒有辦法知道rxjs websocket是否打開
- 12. 有沒有辦法知道ExecutorService是否成功結束?
- 13. 有沒有辦法知道HttpResponse是否在Https中?
- 14. 有沒有辦法知道是否已經創建了IWin32Window?
- 15. 有沒有辦法知道$ http請求是否超時?
- 16. 有沒有辦法檢測通知欄是否已被清除?
- 17. iOS:有沒有辦法知道用戶是否選擇了退出通知?
- 18. 有沒有辦法讓webpack知道全局是否沒有聲明?
- 19. 有沒有辦法讓對象知道它被添加到DOM?
- 20. Slack:是否有辦法禁用所有@channel通知
- 21. 有沒有辦法知道iOS鍵盤真的被隱藏(被用戶解僱)?
- 22. 有沒有辦法知道當前域是否啓用地理定位?
- 23. 有沒有辦法知道用戶是否喜歡Facebook上的對象?
- 24. 有沒有辦法知道電子郵件是否用C#成功轉發?
- 25. 有沒有辦法知道客戶是否使用了優惠券代碼?
- 26. 有沒有辦法知道SD卡上的目錄是否有任何圖像?
- 27. 有沒有辦法用JCLDebug來捕獲所有的異常(即使是那些被處理的異常)?
- 28. 是否有辦法禁用Typesafe Activator UI
- 29. 有什麼辦法可以知道報告是否有訂閱
- 30. 有沒有辦法檢查RVO是否被應用?
任何禁用異常取決於使用的工具,庫,OS ... =>您的問題的答案也取決於這一點。標準C沒有例外。 – deviantfan 2014-09-24 22:57:41
@deviantfan:標準* C++ *,但是,有一些例外。 – 2014-09-24 23:03:08
如果你正在編譯SOURCE代碼(包括頭文件)並且沒有「例外」,並且有一些拋出異常的代碼,那麼編譯器會出錯(至少在g ++和clang ++中) - 換句話說,編譯。 – 2014-09-24 23:03:46