未指定的参数个数和传递给C函数的变量的个数之间有什么区别?

时间:2019-07-11 09:26:43

标签: c function

#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似乎也接受变量或任意数量的参数。两者之间有什么区别,它们如何工作?如果这看起来太明显,则任何链接或参考也将有所帮助。谢谢 。

1 个答案:

答案 0 :(得分:3)

区别在于oo1会发生什么。

  

oo1似乎也接受变量或任意数量的参数

C标准不能保证这一点。实际上,就此而言,所有C标准都说,带有空参数列表的函数定义与带有void参数列表的函数声明兼容(ISO / IEC 9899 6.9 .1,脚注162)。

即函数定义

int oo1() {…}

与原型声明兼容

int oo1(void);

换句话说,您唯一可以做的安全的事就是不带参数调用oo1。但是C编译器没有义务诊断是否违反此规则。也就是说,现代C编译器 会警告:

  

警告:对“ oo1”的调用中包含过多的参数

请注意此警告。您不得使用任何参数调用oo1