无参数行为的 C 函数

发布于 2024-11-06 03:28:44 字数 334 浏览 1 评论 0原文

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

我希望编译器警告我函数 no_args 不需要任何参数。

但代码会递归地编译并运行函数 no_args

static void has_args(int a, int b, int c) { 
    printf("has_args\n");
}

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

void main() {
  no_args();
}

Can somebody explain to me why the following code does compile without a warning or error?

I would expect the compiler to warn me that the function no_args doesn't expect any arguments.

But the code compiles and runs function no_args recursively.

static void has_args(int a, int b, int c) { 
    printf("has_args\n");
}

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

void main() {
  no_args();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

内心激荡 2024-11-13 03:28:44

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

在 C 中,void no_args() 声明一个函数,该函数接受未指定(但不是可变)数量的参数(并且不返回任何内容)。因此,您的所有调用在 C 中都是有效的(根据原型)。

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

In C++, void no_args() declares a function that takes no parameters (and returns nothing).

In C, void no_args() declares a function that takes an unspecified (but not variable) number of parameters (and returns nothing). So all your calls are valid (according to the prototype) in C.

In C, use void no_args(void) to declare a function that truly takes no parameters (and returns nothing).

飘过的浮云 2024-11-13 03:28:44

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

When you declare a function with an empty argument list, you invoke K&R (pre-prototype) semantics and nothing is assumed about the parameter list; this is so that pre-ANSI C code will still compile. If you want a prototyped function with an empty parameter list, use (void) instead of ().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文