【发布时间】:2019-08-22 18:31:38
【问题描述】:
我被告知函数需要声明才能被调用。为了说明,下面的例子会给我一个错误,因为没有函数 sum 的声明:
#include <iostream>
int main() {
std::cout << "The result is " << sum(1, 2);
return 0;
}
int sum(int x, int y) {
return x + y;
}
// main.cpp:4:36: error: use of undeclared identifier 'sum'
// std::cout << "The result is " << sum(1, 2);
// ^
// 1 error generated.
为了解决这个问题,我会添加声明:
#include <iostream>
int sum(int x, int y); // declaration
int main() {
std::cout << "The result is " << sum(1, 2);
return 0;
}
int sum(int x, int y) {
return x + y;
}
为什么 main 函数不需要声明,而像 sum 这样的其他函数需要声明?
【问题讨论】:
-
手动调用 main 会调用未定义的行为。
-
@MichaelStachowsky -- 在 C 语言中,您可以调用
main。在 C++ 中你不是;它不仅仅是“一个功能”——它很特别。从历史上看,原因是编译器在main中添加了代码来初始化需要动态初始化的全局变量;从程序内部调用main将重新初始化这些变量,结果将是混乱。 -
@Michael 你已经尝试了一些东西并发现“它工作得很好”并不能证明某些东西不是未定义的行为。
-
顺便说一句,如果将 main 上方的定义放在文件中,则不需要声明
sum。出于这个原因,通常将main视为 C 和 C++ 源代码中的最后一个函数,因此您不需要对该文件中定义的其他函数进行前向声明。不像 C# 和 Java 通常将main放在首位,尽管在这些情况下不需要。 -
从技术上讲,您的示例代码已经声明了
main,函数的定义也声明了该函数。这就是为什么您可以将sum移动到main之前以避免必须单独声明sum。
标签: c++ main forward-declaration function-declaration