結合這是一個例子:爲什麼使用stdbool.h原因警告時-Wtraditional轉換
#include <stdbool.h>
void foo(bool b){};
void bar(bool b) {foo(b);}
int main() {
bar(false);
}
我編譯:
gcc -Wtraditional-conversion test.c
我得到這些警告:
test.c: In function 'bar':
test.c:4: warning: passing argument 1 of 'foo' with different width due to prototype
test.c: In function 'main':
test.c:7: warning: passing argument 1 of 'bar' with different width due to prototype
爲什麼會發生這些警告?據我可以看到參數都是相同的類型,所以應該是相同的寬度。什麼是 - 傳統轉換在這段非常簡單的代碼中引起這些警告?
我從使用我自己的bool typedef切換到stdbool.h def時開始出現這些錯誤。
我原來的清晰度是:
typedef enum {false, true} bool;
'-Wtraditional-conversion'意思是*如果原型導致類型轉換不同於**中缺少原型***時發生的同一個參數會發生的類型轉換,則發出警告。你似乎在使用C99,那麼爲什麼你需要警告? – cnicutar
你有什麼版本的gcc? –
@JensGustedt gcc(Gentoo 4.4.3-r2 p1.2)4.4.3 – SimonAlfie