调用具有太多参数的函数时的GCC行为

Que*_*tin 4 c gcc

我刚刚注意到GCC的行为对我来说似乎很奇怪(没有与其他编译器核对过).

如果我编译这段代码:

#include <stdio.h>

void foo(int i)
{
  printf("Hello %d\n",i);
}

int main(){
  foo(1, 2);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我会得到一个编译器错误:

test.c:9:5: error: too many arguments to function ‘foo’
Run Code Online (Sandbox Code Playgroud)

但是如果我编译这段代码:

#include <stdio.h>

void foo()
{
  printf("Hello\n");
}

int main(){
  foo(1, 2);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我没有错误或警告.

有人能解释我为什么吗?

我用gcc 4.6.3和arm-none-eabi-gcc 4.8.3测试了这个

编辑:我编译所有警告: gcc -Wall test.c

Éti*_*nne 6

在C中,写入void foo()意味着foo采用了未指定数量的参数.

要表明函数foo()不应该参数,你应该写void foo(void)

因此,您还应该使用签名int main(void).

  • @Quentin 仅在 C 中如此。在 C++ 中,它们是同义词。 (2认同)