使用未定义数量的参数调用C函数

时间:2019-04-14 13:46:42

标签: c function-call

请注意,此问题不涉及省略号。

考虑以下代码

#include <stdio.h>

void foo() {
    printf("I AM AWESOME\n");
}

main(void) {
    foo(1,2,3);
    foo();
return 0;
}

该程序可以完美运行并提供输出。 但是,对于“ main”而言,不管

main(void)

main()

何时,将foo定义为

foo(void)

出现错误-“参数过多”。

如果两者都是函数,难道它们也不应该遵循相同的规则吗?

3 个答案:

答案 0 :(得分:3)

当您声明不带参数的函数时,这意味着禁用类型检查并使用K&R调​​用约定。这并不意味着该函数没有参数。

在ANSI中,当您想明确地说该函数没有参数时,需要将其声明为fun(void)。

答案 1 :(得分:1)

foo(void)不带参数(!!!),而foo()不带参数个数!

答案 2 :(得分:0)

在C语言中还有另外一个称为可变数量的参数

 void foo(int x, ...)

https://www.geeksforgeeks.org/variable-length-argument-c/