2014-06-05 24 views
3

此代碼沒有給我警告,當與g++編譯:當我提供一個有符號的整數給只接受無符號整數的函數時,有沒有辦法讓GCC提醒我?

unsigned int myFunc(unsigned int integer) { 
    return integer; 
} 
int main() { 
    int x = -1; 
    std::cout << myFunc(x) << std::endl; 
} 

它編譯罰款,但結果是錯誤的:4294967295。 GCC是否有任何編譯器-W*選項?

+2

可能的重複[爲什麼GCC在爲無符號類型分配簽名文字時會產生警告?](http://stackoverflow.com/questions/2771538/why-doesnt-gcc-produce-a-warning -when-assigning-a-signed-literal-to-an-unsigned) – user2485710

+2

不要將C++問題標記爲C. – JBentley

+1

現在這個問題明確地不是愚弄,因爲C標記已被刪除,另一個問題是隻有C,而另一個問題的答案在這裏不起作用。可以說,這個問題可能被標記爲這個我猜的愚蠢,因爲這裏的答案適用於C :-) –

回答

5

是,-Wsign-conversion

謹防-Wconversion不啓用此警告的C++代碼,但它爲C代碼。

4

有一個小警告,我應該概述一下,因爲它可能有點棘手,容易混淆。

編譯時C代碼-Wconversion通常就足夠了,因爲它會自動觸發一對其他標誌。

當編譯C++代碼-Wconversion不會觸發確切相同的標誌gcc確實在C,所以你應該使用-Wsign-conversion -Wconversion

Link to the docs

相關問題