2014-09-21 146 views
1

是否可以向g ++添加額外的警告標誌,以便它會在以下代碼中警告我有關單元化的b變量?更好的編譯器警告?

#include <iostream> 
using namespace std; 
int main() { 
    int a, b; 
    cin >> a; 
    while (a>0) b++; 
    cout << a; 
} 

編輯:我忘了提,我試圖打開這個其他問題列出的標誌: Flags to enable thorough and verbose g++ warnings但沒有觸發。 (「Tickled!」,如我所知)。

+0

你有沒有嘗試'g ++ -Wall -Wextra'? – 2014-09-21 17:40:40

+1

我的測試顯示海灣警備局沒有發出警告,並帶有重大警告組(-Wall,-Wextra,-pedantic)和Clang發出警告。 – chris 2014-09-21 17:41:01

+1

您可以添加編譯標誌即。 -壁。 HTTP://計算器。com/questions/11714827/how-to-turn-on-literally-all-of-gccs-warnings – risque 2014-09-21 17:41:28

回答

7

你以後的選項可能-Wmaybe-uninitialized-Wuninitialized。這兩個都是-Wall選項的一部分,它打開了這些選項,還有許多其他警告(-Wxxx選項與警告相關)。

有關gcc警告選項的完整文檔可在以下位置閱讀:Options to Request or Suppress Warnings gcc文檔中。

您可能還會發現-Wextra可能對您有用(單獨使用或與-Wall結合使用)。 -Wextra也啓用-Wuninitialized,但它有其他項目並不總是由-Wall設置,我喜歡看到的東西(如-Wunused-parameter-Wunused-but-set-parameter),雖然這不是特定於此位代碼。


這就是說......(是啊,有一個「上面寫着」)......我似乎不能胳肢錯誤與海灣合作委員會,它是此功能可在http://gcc.godbolt.org

擴展一些你的代碼是專門的文檔中的-Wmaybe-uninitialized

#include <iostream> 
using namespace std; 
int main() { 
    int a, b; 
    int x, y, z; 
    // warning: variable ‘y’ set but not used [-Wunused-but-set-variable] 
    cin >> a; 
    while (a>0) b++; 
    switch(a) { 
    case 1: x = 1; y = 1; z++; break; 
    // warning: ‘z’ may be used uninitialized in this function [-Wmaybe-uninitialized] 
    case 2: x = 4; y = 2; break; 
    case 3: x = 5; y = 3; 
    } 
    cout << a; 
    cout << b; 
    cout << x; 
} 

這說明是癢癢了一批閒置和成套警告的嘗試。我能夠得到z變量產生的錯誤,但由於某種原因b++在while循環不會產生錯誤或警告與gcc(使用gcc 4.9.0進行測試)。

Warnings with gcc 4.9.0

鐺版本3.4.1,但是,併產生與這些命令行選項警告兩個bz

Warnings with clang 3.4.1

雖然-Wall-Wextra產生警告後,由於某些原因,他們不會產生這個特定的代碼在海灣合作委員會4.9.0

+0

http://coliru.stacked-crooked.com/a/14e57e5734b03dbf – chris 2014-09-21 17:45:02

+0

@chris'#clang ++ -std = C++ 1y' ...它不是gcc。 – 2014-09-21 17:45:55

+0

'#'是一條評論。看下面兩行。保留我經常使用的一些東西並且在它們之間切換而不必再次形成它們是很容易的。 – chris 2014-09-21 17:46:58