可以在C程序中main()
声明该函数static
吗?如果是的话那么它的用途是什么?
是否可以使用汇编代码并static main()
自己调用函数(考虑嵌入式程序)?
Die*_*Epp 35
不,C规范实际上在其中的某个地方(我读了规范,不管你信不信),主要功能不能是静态的.
原因是静态意味着"不要让这个源文件之外的任何东西使用这个对象".好处是当你去链接时它可以防止C中的名字冲突(如果你有两个全局变量在不同的文件中被命名为"is_initialized",那将是非常糟糕的...它们会被默默地合并,除非你制作它们静态的).它还允许编译器执行某些优化,否则它将无法执行.这两个原因是为什么静态是一件好事.
由于您无法从文件外部访问静态函数,因此操作系统如何能够访问主函数来启动程序?这就是为什么主要不能是静态的.
有些编译器特别对待"main",并且在声明静态时可能会默默地忽略它.
编辑:看起来我错了,规格说主要不能是静态的,但它确实说它不能在托管环境中内联(如果你不得不问"托管环境"是什么意思,那么你就是在一个).但是在OS X和Linux上,如果你声明main static,那么你会得到一个链接错误,因为链接器找不到"main"的定义.
你可以有一个叫做静态函数main()
在源文件中,它可能会编译,但它不会是该 main()
功能,因为这将是不可见的链接上时,许多人(旧的)Unix系统的启动代码(crt0.o中)电话main()
.
鉴于代码:
static int main(int argc, char **argv)
{
return(argv + argc);
}
extern int x(int argc, char **argv)
{
return(main(argc, argv));
}
Run Code Online (Sandbox Code Playgroud)
海湾合作委员会与-Wall有帮助地说:
warning: 'main' is normally a non-static function
Run Code Online (Sandbox Code Playgroud)
是的,可以做到.不,这通常是一个错误-这是不是该 main()
功能.