#include <stdio.h>
#define L 11
int oo1(){
printf("oooooo\n");
}
int oo2(int C ,...)
{
//some code here
printf("in oo2\n");
}
int main(void){
oo1();
oo1(1,4,7,"f");
oo2(2);
oo2(2,5,7,3,11);
printf("%d\n",L);
}
输出:
oooooo
oooooo
in oo2
in oo2
11
此代码具有2个函数oo1和oo2。 oo2是一个接受可变数量参数的函数。但是,oo1似乎也接受变量或任意数量的参数。两者之间有什么区别,它们如何工作?如果这看起来太明显,则任何链接或参考也将有所帮助。谢谢 。
答案 0 :(得分:3)
区别在于oo1
会发生什么。
oo1似乎也接受变量或任意数量的参数
C标准不能保证这一点。实际上,就此而言,所有C标准都说,带有空参数列表的函数定义与带有void
参数列表的函数声明兼容(ISO / IEC 9899 6.9 .1,脚注162)。
即函数定义
int oo1() {…}
与原型声明兼容
int oo1(void);
换句话说,您唯一可以做的安全的事就是不带参数调用oo1
。但是C编译器没有义务诊断是否违反此规则。也就是说,现代C编译器 会警告:
警告:对“ oo1”的调用中包含过多的参数
请注意此警告。您不得使用任何参数调用oo1
。