能否在 C 程序中将 main()
函数声明为 static
?如果是,那它有什么用?
是否可以使用汇编代码并自己调用static main()
函数(考虑嵌入式程序)?
最佳答案
没有。 C 规范实际上在其中某处说(我读过规范,不管你信不信)主函数不能是静态的。
原因是static的意思是“不要让这个源文件之外的任何东西使用这个对象”。好处是当你去链接时它可以防止 C 中的名称冲突(如果你有两个全局变量都在不同的文件中命名为“is_initialized”,那将是非常糟糕的......它们会静静地合并,除非你让它们静止的)。它还允许编译器执行某些原本无法执行的优化。这两个原因就是为什么静态是一件好事。
既然你不能从文件外部访问静态函数,那么操作系统如何才能访问主函数来启动你的程序呢?这就是为什么 main 不能是静态的。
有些编译器会特别对待“main”,当您将其声明为静态时,可能会默默地忽略您。
编辑:看起来我错了,规范说 main 不能是静态的,但它确实说它不能在托管环境中内联(如果你必须问“托管环境”是什么意思,那么你在一个)。但是在 OS X 和 Linux 上,如果你声明 main static,那么你会得到一个链接错误,因为链接器找不到“main”的定义。
关于C main() 函数可以是静态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/924890/