今天在弄函数声明的时候,发现了这样一个问题,函数写在主函数后面,未进行声明,依然有输出结果,现在把函数注释了还是能输出结果。


今天在弄函数声明的时候,发现了这样一个问题,函数写在主函数后面,未进行声明,依然有输出结果,现在把函数注释了还是能输出结果。


关注引自免费微信小程序:皆我百晓生
在C++中,函数的定义(即函数的实际实现)可以在调用它的代码之后。但是,如果在调用函数之前没有声明(即原型),编译器将会报错,因为它不知道这个函数的存在及其参数和返回类型。
然而,在您给出的例子中,第10行cout<< max(a, b)<<endl;能够正常工作,并且即使将函数max注释掉后仍能输出结果,这是因为C++标准库已经提供了std::max函数模板,它可以直接比较两个值并返回较大的那个。因此,这里实际调用的是std::max而非你自己定义的max函数。
为了解决您的疑惑,假设我们确实想使用自定义的max函数,正确的做法是在主函数前声明该函数:
#include<iostream>
using namespace std;
// 函数声明(原型)
int max(int num1, int num2);
int main() {
int a = 40;
int b = 20;
cout << max(a, b) << endl;
system("pause");
return 0;
}
// 函数定义
int max(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
这样,在调用max(a, b)时,编译器就能够找到匹配的函数声明,确保程序正确编译链接并执行。如果您注释掉了自定义max函数的定义部分,那么在编译阶段虽然不会出错(因为有声明),但在链接阶段会由于找不到函数定义而报错。