У меня есть фрагмент кода в моем файле .y, как показано ниже
void yyerror(s) char *s; {
fputs(s, stderr);
putc('\n', stderr);
}
Объявление прототипа функции находится в другом файле следующим образом
void yyerror (char const *s);
Я попытался скомпилировать кодна Linux и Mac.В Linux компилятор генерирует следующее сообщение об ошибке
error: argument ‘s’ doesn’t match prototype
void yyerror(s) char *s; {
^
В Mac компилятор генерирует следующее предупреждающее сообщение
warning: promoted type 'char *' of K&R function parameter is not compatible with the parameter type 'const char *' declared in a previous prototype [-Wknr-promoted-parameter]
void yyerror(s) char *s; {
^
Мои вопросы:
- Почему clang генерирует предупреждение только тогда, когда cc генерирует ошибку.
- Оба компилятора жалуются на 's' в "char * s".Почему они игнорируют 's' в (), но рассматривают второе 's' как аргумент?