2012-10-23 44 views
1

可能重複:
Can I make GCC warn on passing too-wide types to functions?如何將g ++打印警告的類型轉換爲函數的參數?

有沒有一種方法,使海灣合作委員會或g當我通過一個有符號整數,以接受一個unsigned int類型的函數++產生一個警告?

例如:

int main(){ 
     char buf[8]; 
     int i; 
     for(i=0;i<6;i++) 
       buf[i] = 'a'; 
     buf[6]='\0'; 
     strcat(buf, " "); 
     strncat(buf, "happystacksmashingstring",-1); 
     return 0; 

} 

將導致堆棧溢出,因爲strncat函數取爲size_t作爲它的第三個參數,這常常是一個unsigned int。然而,命令:

g++ -Wall -Wextra -Werror -pedantic -W -Weffc++ -Wconversion test.c 

其中包含每一個警示標誌,我知道,不產生錯誤或警告在編譯時和運行時撞碎的堆棧。

gcc -Wall -Wextra -Werror -pedantic -W -Wconversion test.c 

現將有關對比度的隱式轉換產生錯誤。爲什麼-Wconversion標誌不能正確使用g ++?

+2

-WSign-conversion。 [在C++中,除非明確啓用了-Wsign-conversion,否則默認情況下,在C++中禁用有符號整數和無符號整數之間轉換的警告。](http://linux.die.net/man/1/g++ ) – remi

+0

@remi抱歉,看到你的評論太遲。如果您發佈了答案,我將刪除我的 – codeling

+0

@RandolphCarter關於重複的問題:另一個問題涉及自動收集,但是類型不同。在我自己搜索我的問題的答案時,我沒有遇到它,並且它提出的答案(使用-Wconversion)在任何情況下都不能解決問題。 –

回答

2

從G ++手冊頁:

警告有關符號和無符號整數之間的轉換默認情況下禁用C++中,除非-轉換Wsign明確啓用。

相關問題