我刚刚注意到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
在C中,写入void foo()意味着foo采用了未指定数量的参数.
要表明函数foo()不应该参数,你应该写void foo(void)
因此,您还应该使用签名int main(void).