【发布时间】:2020-05-25 20:43:47
【问题描述】:
我一直在阅读difference between function() and function(void) in C,我才知道
函数中的空参数列表声明表示 函数采用未指定个参数
#include <stdio.h>
void fun();
int main(void)
{
fun(12, 13.22, 1234567890987654321, "wow", 'c');
}
void fun()
{
printf("What happened to those arguments?");
}
我不明白为什么 C 允许这样做。到目前为止,我读过的所有与此相关的帖子都说使用它是不好的做法,它已经过时等。同样从上面的代码中,我认为这些参数的类型也未指定。所以我只想知道“未指定类型的未指定参数”背后的原因:
可以用这些参数做什么?
是否可以在函数中访问这些参数?
【问题讨论】:
-
C11 标准草案 n1570:6.5.2.2 函数调用 6 如果表示被调用函数的表达式的类型不包含原型,[...] 如果参数的数量不等于参数的数量,行为未定义。
-
在声明时,参数的数量(和类型)是未指定的。然而,函数的使用必须与其定义的数量(和类型)相对应。
int foo(); /*declaration*/ int main(void) { foo(42) /*UB*/; foo(3.14159); return 0; } /*definition*/ int foo(double x) { return x; }==> 缩进 ==> ideone.com/4zzlTV