我最近正在對我們的代碼庫進行更改,將其從float變爲long,以查找某些變量,並發現編譯器在我認識的區域中沒有生成錯誤消息仍然是錯誤的。這導致我添加-WConversion到編譯器標誌。但是,哎呀,這會導致一些虛假的錯誤消息。在下面的代碼片段中,我注意到了錯誤。我能做些什麼來在個案的基礎上抑制這個信息,或者哄gcc變得更聰明呢? -Wconversion標誌會在我們的代碼庫中生成數千個警告。我將不得不全面檢查它們嗎?哎呀。如何從gcc中關閉錯誤的float/long錯誤消息
#include <stdio.h>
void
takes_a_float (float some_num) {
printf("float Hello %f\n", some_num);
}
int
main (int argc, char **argv) {
float my_boat = 1.0f;
takes_a_float ( my_boat);
exit (0);
}
gcc -Wconversion foo.c
foo.c: In function `main':
foo.c:13: warning: passing arg 1 of `takes_a_float' as `float' rather than `double' due to prototype
$ gcc -v
Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr /share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=x86_64-redhat-linux
Thread model: posix
gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)
編輯
正如約翰·米利金指出,該-Wconversion標誌工作 '作爲設計的'。 (我原以爲是關於類型轉換,但事實證明它是將真正舊的C風格程序轉換爲ISO標準的C. Darn。我的gcc版本的gcc警告 文檔頁的閱讀並未給出我希望,但在任何情況下,我真正想要的是一些其他的警告標誌,以使將在如下因素代碼正確警告,並沒有給假警告。
#include <stdio.h>
#include <stdlib.h>
void
takes_a_long (long sad_story) {
printf("Long %lu\n", sad_story);
}
void
takes_a_float (float my_boat) {
printf("Float %f\n", my_boat);
}
int
main (int argc, char **argv) {
float my_boat = 1.0f;
long sad_story = 1.0L;
// No warnings wanted
takes_a_float (my_boat);
takes_a_long (sad_story);
// Warnings required
takes_a_long (my_boat);
takes_a_float (sad_story);
exit (0);
}
編輯2
的真正的解決方案是升級我的編譯器,而不是公司爲了複雜的原因而願意做的事(嘆氣)
我剛纔試了一下。沒有幫助。感謝您的建議。 – Leonard 2009-04-14 21:53:00
我現在所要做的就是說服公司的另一個分支中的3層管理層來升級我們的編譯器。 :-(。感謝您的幫助 – Leonard 2009-04-14 23:12:56
難道你不能只是爲了轉換而用gcc 4.3編譯代碼,然後繼續使用你的舊編譯器進行生產? – jpalecek 2009-04-15 08:55:42