В версиях gcc до 4.3, -Wconversion
выдает предупреждение, когда поведение может отличаться в зависимости от того, находится ли прототип в области действия. В приведенном вами примере аргумент 3 (data.card
) имеет значение unsigned char
; если прототип для event_add_card()
находится в области видимости, он будет передан как unsigned char
, но если прототип не находится в области видимости, он будет передан как int
из-за целочисленных правил продвижения C - отсюда и предупреждение.
Это не очень полезно, за исключением процесса преобразования старого кода в стиле K & R для использования прототипов. Таким образом, если вы используете более старую версию gcc, этот параметр обычно не используется для включения.
Начиная с gcc 4.3, поведение изменилось: теперь он предупреждает о любом неявном преобразовании, которое может изменить значение (скажем, между целыми числами со знаком и без знака или целыми числами и числами с плавающей запятой). Это значительно полезнее. (Тем не менее, предыдущая функциональность не исчезла: она все еще доступна, но переименована в -Wtraditional-conversion
.)
(подробнее на http://gcc.gnu.org/wiki/NewWconversion.)