vpi*_*lai 3 c callstack compilation function-calls
如果我传递的参数多于函数所需的参数,会发生什么情况?我预计被调用函数中的某些内容会被损坏,但在一些小型测试代码中一切正常。
例如:
void print()
{
int x=10;
printf("%d\n",x);
}
void main()
{
print(0,0,0,0,0);
}
Run Code Online (Sandbox Code Playgroud)
这是未定义的行为。
(C99, 6.5.2.2p6) “如果表示被调用函数的表达式具有不包含原型的类型,[...]如果参数数量不等于参数数量,则行为未定义。 ”
从 6.9.1p7 中我们知道该print函数不提供原型。
C99, 6.9.1p7) “如果声明符包含参数类型列表,则该列表还指定所有参数的类型;这样的声明符还可以用作以后调用同一翻译单元中的同一函数的函数原型。如果声明符包括标识符列表,142)参数的类型应在以下声明列表中声明。”
由于不存在约束违规,因此不需要诊断消息。
| 归档时间: |
|
| 查看次数: |
3835 次 |
| 最近记录: |