在 main() 内部和外部声明用户定义函数的区别

2024年8月28日 | 阅读 4 分钟

函数在 main 内部和外部的声明与全局变量和局部变量相同。当我们把任何函数声明在 main 函数外部时,它就是全局定义的,并且处于全局作用域。当我们把任何函数定义在 main 函数内部时,它就处于 main 函数的局部作用域。因此,main 函数外部的任何函数都不能使用 main 函数内部的函数。

在 main 函数外部定义的函数可以被任何函数访问和使用,无论它是在 main 函数内部还是外部。

示例 1

当我们把任何函数声明在 main() 函数外部时。

C++ 代码

输出

The difference is 2

说明

在上面的代码中,我们有两个函数定义在 main() 函数外部。一个函数用于执行减法,另一个是辅助函数。辅助函数被称为 diff 函数。由于这两个函数都在全局作用域中,所以没有错误。我们在函数中给出了两个整数值 5 和 3,得到了输出 2,即 5-3。

示例 2

当我们把函数声明在 main() 函数内部时。

C++ 代码

输出

/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);
      |         ^~~~

说明

在上面的代码中,我们将 diff 函数声明在 main 内部,并通过 helper 函数调用它,而 helper 函数声明在 main 外部。由于 diff 函数的作用域仅限于 main(),并且无法在 main() 函数外部访问,因此我们得到了错误。

注意:当我们有两个同名函数,但一个声明在 main 外部,一个声明在 main 内部,并且具有不同的函数签名时。如果我们调用全局函数,可能会因为忽略局部函数而出现错误。

示例 3

C++ 代码

输出

The difference is 2

说明

在上面的代码中,我们局部声明了函数,并在 main 内部调用了它,因此我们得到了结果,没有任何错误。我们在函数中给出了两个整数值 5 和 3,得到了输出 2,即 5-3。

示例 4

C++ 代码

输出

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() 函数内部访问它。我们期望的答案是一个整数值,但它会报错,因为我们有相同的函数名,其中一个在局部声明,而我们正在调用一个全局函数。

因此,由于对局部函数的忽略,我们得到了错误。