我希望能夠做這樣的事情:如何生成編譯時錯誤?
void f(int*p = nullptr)
{
if (!p)
{
//HERE I WOULD LIKE TO HAVE AN MSG THAT WOULD BE DISPLAYED DURING COMPILATION AS A WARNING POSSIBLY
}
}
我希望能夠做這樣的事情:如何生成編譯時錯誤?
void f(int*p = nullptr)
{
if (!p)
{
//HERE I WOULD LIKE TO HAVE AN MSG THAT WOULD BE DISPLAYED DURING COMPILATION AS A WARNING POSSIBLY
}
}
正確的答案是:您試圖做的事情永遠不會奏效。
大多數,if not all,編譯器支持#error
和#warning
預處理指令。
但是,Microsoft的編譯器使用#pragma message()
而不是#warning
。
我確實使用Visual Studio,並試圖使用#pragma消息,但對於bizzare原因不適用於我。 – 2010-11-15 19:56:37
@有'#pragma message(「blah」)'已經爲我工作了10年以上。如果它不適合你,你做錯了什麼。 – sbi 2010-11-15 20:10:36
Google #if
#endif
and #error
預處理器指令。根據編譯時不可用的變量的值生成編譯錯誤是不可能的,所以忘掉它吧。使用assert()
。
要生成基於運行時檢查的編譯時警告,只需創建一個名爲「warning.c」的文件,其中包含一個未使用的變量聲明。然後,您可以生成如下警告:
void f(int *p = nullptr) {
if (!p) {
system("gcc -Wall warning.c");
}
}
這很有趣,並回答了這個問題! – CiscoIPPhone 2010-11-15 19:51:34
'system(「cat int c;> /tmp/warning.c && gcc -Wall /tmp/warning.c && rm /tmp/warning.c」);' - 不妨提供:) – MSalters 2010-11-16 09:26:59
你想在編譯時發出警告,取決於運行時發生了什麼?一般來說這是不可能的。也許你想要的東西稍有不同,我們實際上可以提供幫助?請詳細說明您嘗試解決的問題:) – 2010-11-15 19:22:23
爲什麼該函數會提供一個非法的默認參數'nullptr'?這是毫無意義的,不是嗎? :) – fredoverflow 2010-11-15 19:24:57
@FredOverflow - 它不是點,如果你從這個角度看,這取決於政策這個函數運行指針傳遞或與nullptr;) – 2010-11-15 19:46:46