gpt4 book ai didi

c++ - 在 C 文件中使用函数之前,您不应该总是需要定义函数吗?

转载 作者:搜寻专家 更新时间:2023-10-30 23:49:26 25 4
gpt4 key购买 nike

我有以下 C 代码:

int main() {
myFunctionABC(2);
return 0;
}

void myFunctionABC(int n) {
printf("%d\n", n);
}

所以...这段代码可以正常工作,但我不明白为什么。我一直认为 C 编译器总是需要每个引用的函数都已经“已知”,否则编译过程会失败。

为什么会这样?

最佳答案

在用 C 或 C++ 调用函数之前,从来没有任何要求定义(正如您的问题标题所示)。 C++ 和 C99(在某些情况下在 C89/90 中)要求的是在调用函数之前声明函数。

至于你的代码......你的代码不“工作”。您最多只能希望您的代码产生未定义的行为,这些行为恰好类似于“工作”。

首先,代码甚至不会编译为 C++ 或 C99(并且您将问题标记为 C 和 C++)。 C++ 和 C99 无条件地要求函数在调用之前声明

其次,使用 C89/90 编译器,代码可能编译,但无论如何都会产生上述未定义的行为。即使在 C89/90 中调用可变参数函数(如 printf)而不首先声明它们也是非法的 - 它会产生未定义的行为。

对于非可变参数函数,调用它们而不声明它们是可以的——C89/90 的隐式声明规则将解决这个问题。但这些规则将使编译器得出结论,您未声明的 myFunctionABC 函数返回一个 int,而实际上您将其定义为返回 void - 这差异也会导致未定义的行为。大多数有自尊心的编译器至少会就此问题向您发出警告。

关于c++ - 在 C 文件中使用函数之前,您不应该总是需要定义函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356180/

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