gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:46 26 4
gpt4 key购买 nike

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

最佳答案

不同之处在于未指定 oo1 会发生什么。

oo1 accepts variable or any number of arguments too as it seems

C 标准不保证这一点。事实上,关于这方面的所有 C 标准都是说,具有空参数列表的函数 定义 与具有 void 参数列表的函数声明兼容(ISO/IEC 9899 6.9.1,脚注 162)。

即函数定义

int oo1() {…}

与原型(prototype)声明兼容

int oo1(void);

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

warning: too many arguments in call to 'oo1'

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

关于c - 未指定的参数数量和传递给 C 函数的可变参数数量之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56985938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com