編輯:
鑄造是唯一的方法,如果你想閉嘴每次的編譯器在便攜式的方式。只要你知道你在做什麼,例如您可以確保atoi
的結果永遠不會爲負。
在GCC中,您可以用-Wno-sign-conversion
標誌關閉所有符號轉換警告。還有-Wno-sign-compare
(對於像2u > 1
之類的東西),但除非您使用-Wextra
,否則它將不相關。
您也可以使用diagnostic pragmas像
#pragma GCC diagnostic ignored "-Wsign-conversion"
在MSVC,有幾個警告相關的符號/無符號不匹配,如:
要在MSVC中禁用警告,您可以添加#pragma warning
,例如
#pragma warning (disable : 4267)
或在編譯器選項中添加一個/wd4267
標誌。
也許你應該使用strtoul
,而不是atoi
。
size_t a = strtoul(val, NULL, 0);
(沒有警告只有size_t
是unsigned long
大。在大多數平臺上,這是事實,但不能保證。)
的好處是,你可以進行錯誤檢查有了這個功能,例如
#include <stdlib.h>
#include <stdio.h>
int main() {
char val[256];
fgets(val, 256, stdin);
char* endptr;
size_t a = strtoul(val, &endptr, 0);
if (val == endptr) {
printf("Not a number\n");
} else {
printf("The value is %zu\n", a);
}
return 0;
}
你當然可以在不同的文件上運行其他gcc命令行。 我的方法確實不會修復它們的代碼(因爲在以後版本的點點中不兼容)。如果他們在意你應該發送bugreports。 – 2010-07-31 06:56:47