【发布时间】:2012-12-26 06:42:34
【问题描述】:
可能重复:
Why does gcc allow arguments to be passed to a function defined to be with no arguments?
代码:
#include <stdio.h>
#include <stdlib.h>
void test_print()
{
printf("test print\n");
}
int main()
{
test_print(1,2);
return 0;
}
虽然 main 中 test_print 的调用者与该函数的定义有不同的参数数量,但代码可以很好地工作,但是如果将其更改为 c++ 版本,则会出现编译错误“函数的参数太多.. ……”。 为什么C允许函数的参数不匹配调用,我们什么时候可以使用这种调用方式?以及为什么它在 c++ 中被禁止。
系统 ubuntu 11.10
编译器:gcc 4.6.1
【问题讨论】:
-
在 C99 中,这会调用未定义的行为。请参阅:C99 6.5.2.2/6 如果表示被调用函数的表达式具有不包含原型的类型,则对每个参数执行整数提升,并且具有浮点类型的参数提升为双精度。这些称为默认参数提升。如果参数的数量不等于参数的数量,则行为未定义。