为啥我们不能在 C 语言中拥有两个主要功能?

Posted

技术标签:

【中文标题】为啥我们不能在 C 语言中拥有两个主要功能?【英文标题】:Why can't we have two main functions in C language?为什么我们不能在 C 语言中拥有两个主要功能? 【发布时间】:2013-10-09 13:01:00 【问题描述】:

谁能解释一下内部发生了什么,除了main 是起点,我们不能有两个起点。

int main()

   int main()
   
      return 0;
   
   return 0;

【问题讨论】:

我不明白你在问什么。你能澄清一下吗? 嵌套函数不是 C 的一部分。有一个 GCC 扩展。你问的是这个吗? 【参考方案1】:

这不是合法的 C 代码 - 在 C 中,函数不能在另一个内部定义。

不能这样做没有根本原因,但是实现这样的函数要么使激活记录布局复杂化,并且会降低效率(因为像闭包这样的考虑),要么会引入内存的潜力错误(如果你返回一个指向另一个函数内部的函数的指针,而内部函数引用外部函数中的数据,会发生什么?)为了简单和高效,C 只是不支持这一点。

希望这会有所帮助!

【讨论】:

s/declared/defined/ 你可以在函数definitiondeclare一个函数;你不能嵌套定义(尽管 gcc 支持它作为扩展)。【参考方案2】:

标准 C 不允许在另一个函数中定义一个函数。一些编译器支持将此作为扩展名,但名称必须不同,否则按名称调用函数会模棱两可。

main 是程序的入口点。根据定义,一个程序只有一个入口点:它是在程序启动时(经过一些初始化)执行的函数,并且在该函数返回时(经过一些清理之后)程序退出。

【讨论】:

【参考方案3】:

因为程序必须有一个起点。命名为“main”的函数是 C 中的默认起点。这就是 C 保留“main”作为名称的原因,您不能拥有另一个名为“main”的函数。

【讨论】:

以上是关于为啥我们不能在 C 语言中拥有两个主要功能?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中为啥函数不能重名?请举个函数重名的例子,谢谢

为啥在网上找的一些c语言程序的代码在vc++6.0中编译总是出现错误?求指教

c语言char和int可以互相赋值,但指针不能赋值,char *和int *不能直接赋值,为啥呢?谢谢

在C语言中能否直接给指针指向的数据赋值?为啥?

C语言所有变量都默认为auto,全局变量不能为auto,那全局变量默认为啥?

CString之间为啥不能互相赋值