文件为:
在C语言中,"main"函数和其他函数一样,它有一个返回类型(在某些情况下通过参数接受输入)。唯一的区别是当用户运行程序时,主函数被操作系统"调用"。因此,主函数总是程序启动时执行的第一个代码。
但当我跑的时候
int main() {
printf("%d", square(3));
return 0;
}
int square(int n) {
int sq = n * n;
return sq;
}
程序打印9.那么main()函数是在所有其他函数之后才被执行,还是它有不同的特殊性?
4条答案
按热度按时间zqdjd7g91#
命令如下:
1.操作系统调用
main()
main()
调用square(3)
。square(3)
计算结果9
并返回。main()
调用printf("%d", 9)
printf()
在终端上打印9
,并返回打印的字符数(1)。main()
向操作系统返回0。fjaof16o2#
被定义和被调用是有区别的。
main()
是运行时直接调用来执行程序的一个函数。其他一些函数可能会在全局变量的初始化器中调用,或者在其他一些特殊情况下调用,但是让我们忽略这些函数,特别是因为它们与您的情况无关。而所有其他的代码都以某种方式从那里直接或间接地被调用。或者它们只是死代码。
自C99以来,
main()
还有另一个不同之处:return 0;
对于它是隐式的。顺便说一句,提高警告级别,所有那些在声明之前/没有声明的函数都是错误的。
sd2nnvve3#
此代码
依赖于 * 隐式函数声明 * 的过时特性,因为在
main
中使用名称square
之前没有对其进行声明。在1999年的修订版中,此特性已从C标准中删除。所有最常用的C编译器仍然荣誉此特性(带有警告)为了向后兼容的缘故,但实际上 * 使用 * 它是不好的风格,可以隐藏bug。你应该用显式的“前向声明”来编写这个程序main
以上的square
:(Not在函数声明或定义的参数圆括号中放置任何东西也是一个过时的特性。要声明或定义一个不带参数的函数,你必须说
(void)
。)(In由于历史原因,首选的样式是将函数定义的左大括号放在它自己的行上,即使所有其他左大括号都与
if
、for
等“挤在”同一行上。)话虽如此,函数square之所以被执行,主要是因为它被调用为:
也就是说,首先
main
获得控制权,然后在main
中调用函数square
。如果main
没有调用square
,或者调用了调用它的函数,square
将永远不会执行。函数
main
与其他函数的区别在于,在宿主环境中,函数main
包含程序的入口点,即它首先获得控制权,而函数main
可以不定义return语句,尽管它的返回类型是int
。h43kikqp4#
我已经大致考虑过这个问题了。我的出发点是“我应该在main函数还是库函数中处理动态分配即malloc?
最后我发现,如果我们不区分main函数和其他函数,那么这就不是一个问题了,所以,这取决于算法是在main函数内部完成所有事情,还是将其分成一些函数。