C函数没有参数行为

时间:2011-05-08 19:22:06

标签: c

有人可以向我解释为什么以下代码在没有警告或错误的情况下编译?

我希望编译器警告我函数测试不要求任何参数。

但代码会递归编译并运行函数测试。

static void test1(int a, int b, int c) { }

static void test() {
    printf("HERE\n");
    test(1, 2, 3);
}

void main() {
  test();
}

2 个答案:

答案 0 :(得分:51)

在C ++中,void test()声明一个不带参数的函数(并且不返回任何内容)。

在C中,void test()声明一个函数,它接受一个未指定(但不是可变)的参数(并且不返回任何参数)。所以你的所有电话都是有效的(根据原型)在C。

在C中,使用void test(void)声明一个真正不带参数的函数(并且不返回任何参数)。

答案 1 :(得分:11)

当您使用空参数列表声明一个函数时,您将调用K& R(预原型)语义,并且不会假设参数列表;这样前ANSI C代码仍然可以编译。如果您想要一个带有空参数列表的原型函数,请使用(void)而不是()