2010-11-15 108 views
-2

我希望能夠做這樣的事情:如何生成編譯時錯誤?

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 
} 
    } 
+12

你想在編譯時發出警告,取決於運行時發生了什麼?一般來說這是不可能的。也許你想要的東西稍有不同,我們實際上可以提供幫助?請詳細說明您嘗試解決的問題:) – 2010-11-15 19:22:23

+5

爲什麼該函數會提供一個非法的默認參數'nullptr'?這是毫無意義的,不是嗎? :) – fredoverflow 2010-11-15 19:24:57

+0

@FredOverflow - 它不是點,如果你從這個角度看,這取決於政策這個函數運行指針傳遞或與nullptr;) – 2010-11-15 19:46:46

回答

10

正確的答案是:您試圖做的事情永遠不會奏效。

5

大多數,if not all,編譯器支持#error#warning預處理指令。

但是,Microsoft的編譯器使用#pragma message()而不是#warning

+0

我確實使用Visual Studio,並試圖使用#pragma消息,但對於bizzare原因不適用於我。 – 2010-11-15 19:56:37

+2

@有'#pragma message(「blah」)'已經爲我工作了10年以上。如果它不適合你,你做錯了什麼。 – sbi 2010-11-15 20:10:36

3

Google #if#endif and #error預處理器指令。根據編譯時不可用的變量的值生成編譯錯誤是不可能的,所以忘掉它吧。使用assert()

19

要生成基於運行時檢查的編譯時警告,只需創建一個名爲「warning.c」的文件,其中包含一個未使用的變量聲明。然後,您可以生成如下警告:

void f(int *p = nullptr) { 
    if (!p) { 
     system("gcc -Wall warning.c"); 
    } 
} 
+0

這很有趣,並回答了這個問題! – CiscoIPPhone 2010-11-15 19:51:34

+0

'system(「cat int c;> /tmp/warning.c && gcc -Wall /tmp/warning.c && rm /tmp/warning.c」);' - 不妨提供:) – MSalters 2010-11-16 09:26:59