main()函数与C语言中的其他函数相比如何?

shstlldc  于 2023-01-25  发布在  其他
关注(0)|答案(4)|浏览(192)

文件为:
在C语言中,"main"函数和其他函数一样,它有一个返回类型(在某些情况下通过参数接受输入)。唯一的区别是当用户运行程序时,主函数被操作系统"调用"。因此,主函数总是程序启动时执行的第一个代码。
但当我跑的时候

int main() {
    printf("%d", square(3));
    return 0;
}

int square(int n) {
    int sq = n * n;
    return sq;
}

程序打印9.那么main()函数是在所有其他函数之后才被执行,还是它有不同的特殊性?

zqdjd7g9

zqdjd7g91#

命令如下:
1.操作系统调用main()

  1. main()调用square(3)
  2. square(3)计算结果9并返回。
  3. main()调用printf("%d", 9)
  4. printf()在终端上打印9,并返回打印的字符数(1)。
  5. main()向操作系统返回0。
fjaof16o

fjaof16o2#

被定义和被调用是有区别的。
main()是运行时直接调用来执行程序的一个函数。其他一些函数可能会在全局变量的初始化器中调用,或者在其他一些特殊情况下调用,但是让我们忽略这些函数,特别是因为它们与您的情况无关。
而所有其他的代码都以某种方式从那里直接或间接地被调用。或者它们只是死代码。
自C99以来,main()还有另一个不同之处:return 0;对于它是隐式的。
顺便说一句,提高警告级别,所有那些在声明之前/没有声明的函数都是错误的。

sd2nnvve

sd2nnvve3#

此代码

int main() {
    printf("%d", square(3));
    return 0;
}

int square(int n) {
    int sq = n * n;
    return sq;
}

依赖于 * 隐式函数声明 * 的过时特性,因为在main中使用名称square之前没有对其进行声明。在1999年的修订版中,此特性已从C标准中删除。所有最常用的C编译器仍然荣誉此特性(带有警告)为了向后兼容的缘故,但实际上 * 使用 * 它是不好的风格,可以隐藏bug。你应该用显式的“前向声明”来编写这个程序main以上的square

int square(int n);

int main(void)
{
/* remainder of program as you have it */

(Not在函数声明或定义的参数圆括号中放置任何东西也是一个过时的特性。要声明或定义一个不带参数的函数,你必须说(void)。)
(In由于历史原因,首选的样式是将函数定义的左大括号放在它自己的行上,即使所有其他左大括号都与iffor等“挤在”同一行上。)
话虽如此,函数square之所以被执行,主要是因为它被调用为:

int main() {
    printf("%d", square(3));
                 ^^^^^^
    return 0;
}

也就是说,首先main获得控制权,然后在main中调用函数square。如果main没有调用square,或者调用了调用它的函数,square将永远不会执行。
函数main与其他函数的区别在于,在宿主环境中,函数main包含程序的入口点,即它首先获得控制权,而函数main可以不定义return语句,尽管它的返回类型是int

h43kikqp

h43kikqp4#

我已经大致考虑过这个问题了。我的出发点是“我应该在main函数还是库函数中处理动态分配即malloc?
最后我发现,如果我们不区分main函数和其他函数,那么这就不是一个问题了,所以,这取决于算法是在main函数内部完成所有事情,还是将其分成一些函数。

相关问题