gpt4 book ai didi

c - 为什么 gcc 允许将参数传递给定义为不带参数的函数?

转载 作者:太空狗 更新时间:2023-10-29 16:15:57 27 4
gpt4 key购买 nike

我不明白为什么这段代码可以编译?

#include <stdio.h>
void foo() {
printf("Hello\n");
}

int main() {
const char *str = "bar";
foo(str);
return 0;
}

gcc 甚至没有警告我向 foo() 传递了太多参数。这是预期的行为吗?

最佳答案

在 C 中,用空参数列表声明的函数在被调用时接受任意数量的参数,这些参数受通常的算术提升的约束。调用者有责任确保提供的参数适合函数的定义。

要声明一个采用零参数的函数,您需要编写 void foo(void);

这是历史原因;最初,C 函数没有原型(prototype),因为 C 从 B 演化而来,一种无类型的语言。添加原型(prototype)后,原始的无类型声明保留在语言中以实现向后兼容性。

要让 gcc 对空参数列表发出警告,请使用 -Wstrict-prototypes :

Warn if a function is declared or defined without specifying the argument types. (An old-style function definition is permitted without a warning if preceded by a declaration which specifies the argument types.)

关于c - 为什么 gcc 允许将参数传递给定义为不带参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12643202/

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