这是一个例子:
#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 做了什么来导致这些警告?
当我从使用自己的 bool typedef 切换到 stdbool.h def 时,我开始遇到这些错误。
我原来的定义是:
typedef enum {false, true} bool;