Вот пример:
#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 на определение stdbool.h.
Моя первоначальная защита была:
typedef enum {false, true} bool;
-Wtraditional-conversion
означает Предупреждать, если прототип вызывает преобразование типа, отличное от того, что произошло бы с тем же аргументом в отсутствии прототипа. Кажется, вы используете C99, так зачем вам предупреждение? - person cnicutar   schedule 14.05.2012