C++ 在main()内部和外部声明用户定义函数之间的区别
在main函数内部和外部声明函数与全局变量和局部变量类似。当我们在main函数外部声明任何函数时,它是在全局范围内定义的,它是在全局作用域中。当我们在main函数内部定义任何函数时,它位于main函数的局部作用域内。因此,main函数外的任何函数都无法使用main函数内部的函数。
在main函数外定义的函数可以被任何函数访问和使用,无论是它在main函数内部还是在外部。
示例1
当我们在main()函数外部声明任何函数时。
C ++代码:
#include
using namespace std;
void diff(int a, int b); // global declaration of the function
void fxn(int x, int y); // global declaration of the function
int main()
{
int a = 5;
int b = 3;
fxn(a, b);
}
void fxn(int a, int b)
{
diff(a, b);
}
void diff(int a, int b)
{
cout << "The difference is " << a - b;
}
输出:
The difference is 2
解释:
在上面的代码中,我们定义了两个函数,这两个函数都是在main()函数外定义的。一个函数用于获取减法结果,另一个是辅助函数。辅助函数被称为diff函数。由于这两个函数都在全局作用域中,所以没有错误。我们在函数中给定了两个整数值,分别为5和3,我们得到的输出结果是2,即5-3相等于2。
示例2
当我们将函数声明在main()函数内部时。
C++代码:
#include
using namespace std;
void fxn(int x, int y); // global declaration of the function
int main()
{
void diff(int a, int b); // local declaration of the function
int a = 5;
int b = 3;
fxn(a, b);
}
void fxn(int a, int b)
{
diff(a, b);
}
void diff(int a, int b)
{
cout << "The difference is " << a - b;
}
输出:
/tmp/stIpvIA8cL.cpp: In function 'void fxn(int, int)':
/tmp/stIpvIA8cL.cpp:14:9: error: 'diff' was not declared in this scope
14 | diff(a, b);
| ^~~~
解释:
在上述代码中,我们在main函数内部声明了diff函数,并通过在main函数外声明的helper函数来调用它。由于diff函数的作用域限于main()函数内部,无法在main()函数外部访问,所以我们得到了错误。
注意:当我们有两个同名的函数,一个在main函数外部声明,一个在main函数内部声明,并且它们的函数签名不同。如果我们调用全局函数,由于忽略了局部函数,可能会出现错误。
示例3
C++代码:
#include
using namespace std;
int diff(int a ,int b)
{
int s= a-b;
return s;
}
int main()
{
int diff(int a, int b); // local declaration of the function
int a = 5;
int b = 3;
cout << "The difference is "<
输出:
The difference is 2
解释:
在上面的代码中,我们有函数的本地声明,并在主函数中调用它,所以我们得到了没有任何错误的结果。我们在函数中给出了两个整数值为5和3,然后得到了输出结果为2,即等于5减3。
示例4
C++代码:
#include
using namespace std;
int diff(); // global declaration of the function
int main()
{
int diff(int a , int b); //local declaration of the function
int a=5;
int b=3;
cout<
输出:
g++ /tmp/stIpvIA8cL.cpp
/tmp/stIpvIA8cL.cpp: In function 'int main()':
/tmp/stIpvIA8cL.cpp:9:19: error: too few arguments to function 'int diff(int, int)'
9 | cout<
解释:
在上面的代码中,我们有两种类型的diff()函数。一个diff()函数有参数,并返回两个数字之间的差异。另一个函数返回一个整数,没有任何计算。因此,带有参数的diff()函数在main()函数内部声明,它是main()函数的局部变量。另一个diff()函数在main()函数外部声明。在main()函数中,我们调用没有参数的diff()函数,因为它是全局定义的,所以我们可以在main()函数内部访问它。我们期望得到一个整数值作为答案,但是因为我们有相同的函数名,在本地声明并调用它作为全局函数,导致出现错误。
因此,由于对局部函数的忽视,我们得到了错误。