【发布时间】:2013-08-14 15:56:31
【问题描述】:
代码如下:
int func(param111)
{
printf("%d\n", param111);
return param111;
}
int main()
{
int bla0 = func(99);
int bla1 = func(10,99);
int bla2 = func(11111110,99,10001);
printf("%d, %d, %d\n", bla0, bla1, bla2);
}
编译结果:
zbie@ubuntu:~$ gcc -Wall -g -std=c99 -O2 zeroparam.c
zeroparam.c: In function ‘func’:
zeroparam.c:2: warning: type of ‘param111’ defaults to ‘int’
运行结果:
zbie@ubuntu:~$ ./a.out
99
10
11111110
99, 10, 11111110
我知道如果 func 的参数为零,例如 int func() 它将接受 any 输入,则代码应该没问题。但是这段代码是如何编译并成功运行的呢?
【问题讨论】:
-
取决于编译器; Apple LLVM 5.0 会生成许多关于附加参数的警告。
-
还有一个隐含的 int 问题,我删除了我的帐户... >.
-
哦,顺便说一句,定义一个不带参数的函数然后将参数传递给它是未定义的行为,根据规范 (6.9.1/8):“如果一个函数接受可变数量的参数的定义没有以省略号结尾的参数类型列表,则行为未定义。”因此,要正确接受可变数量的参数,必须有一个正确的参数和一个省略号 (
...)。 -
@H2CO3,这可能很烦人,但它提供了谷歌索引。一个人问它,多年来会帮助几个人。
-
@JoachimPileborg,对于每个花时间在 SO 上写问题的人,无论多么幼稚,我敢打赌,谷歌会有更多随机关键词。
标签: c