これは例です:
#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
なぜこれらの警告が発生するのですか?私が見る限り、引数はすべて同じタイプなので、同じ幅にする必要があります。この非常に単純なコードでこれらの警告を発生させるために-Wtraditional-conversionは何をしていますか?
自分のtypedefのboolからstdbool.hdefに切り替えたときに、これらのエラーが発生し始めました。
私の元の定義は次のとおりです。
typedef enum {false, true} bool;