为什么参数可以在函数定义的()之外?

时间:2018-11-29 22:43:10

标签: gcc arguments clang function-prototypes

我的.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; {
                      ^

我的问题是:

  1. 为什么当cc生成错误时clang只生成警告。
  2. 两个编译器都抱怨“ char * s”中的“ s”。为什么他们忽略()中的“ s”,却将第二个“ s”作为参数?

0 个答案:

没有答案