我可以用C或C ++编写具有两个主函数的程序吗?
不行。所有程序都只有一个main()函数,这是编译器和链接器生成可执行文件时使用的一个合理的起点。
基本上你有两个选择:
让main()解释一些命令行参数来决定调用哪个实际的main函数。缺点是你将得到一个同时包含两个程序的可执行文件。
将共享的代码制作成库,并编译每个main文件与该库对应。这样你会得到两个可执行文件。
main
只有一个具有外部链接的定义,但 C 标准并没有明确禁止使用内部链接(用 static
声明)的其他定义。至少在 Apple LLVM 10.0.0 with clang-1000.11.45.5 中,可以接受这种定义并生成可执行文件,尽管会有警告。 - Eric Postpischil你可以有两个名为main
的函数。这个名称没有任何特殊含义,也不是保留字。特殊的是函数,它碰巧有这个名称。这个函数是全局的。因此,如果你在其他命名空间中编写了一个主函数,你将拥有第二个main
函数。
namespace kuppusamy {
int main() { return 0; }
}
int main() { kuppusamy::main(); }
第一个 main
函数并不特殊 - 请注意您必须显式使用 return
。
return 0;
(return;
无效)。而且返回类型必须保持int。以任何方式使用此功能除了指出::main的特殊之处外都是可疑的,可能会有所不同。 - Roger Pate::main
而不是main
(就像::_a
被保留但ns::_a
不被保留一样)。我不确定原帖作者是否真正理解他可以进行这种区分,更不用说他应该这样做了。 - Roger Patestruct main { };
,这证明了::main
不是保留给主函数的名称的说法是错误的 :) - Johannes Schaub - litbmain
的第二个函数:命名空间名称被编码为符号名称,而唯一的 main()
才是真正被称为 main
的符号。 - cmaster - reinstate monica是的,但它是特定于平台而不是标准C,如果您询问您真正想要实现的目标(而不是这个问题的尝试解决方案),那么您可能会收到更有帮助的答案。
main()
)。事实上,在C语言中,通常情况下,你只能有一个特定名称的函数。如果一个变量是static
并且位于不同的源代码文件中,我看不出任何问题。
不,main()
定义了程序的入口点,你的程序中只能有一个main()
函数(入口点)。
坦白地说,我对你的问题并不太理解。
“主函数”是什么意思?如果你指的是程序启动时执行的第一个函数,那么你只能有一个。(你只能有一个第一项!)
如果你想让应用程序在启动时执行不同的功能,你可以编写一个主函数来读取命令行(例如),然后决定调用哪个其他函数。
不行,在C语言中你不能有多个main()函数。在标准的C语言中,main()函数是一个特殊的函数,被定义为程序的入口点。无论你在C语言或其他任何编程语言中创建了什么样的函数,除非你指定不同的函数签名,否则都不能有多个副本存在。但在main()函数的情况下,我想你别无选择;)
不,main()是程序的入口点,因为你不能有两个入口点,所以你不能有两个main()。
int main(int argc, char **argv){ int (*start)(int, char **); if (strcmp(argv[0], "file_name1") == 0) start = start_file_name1; else if (strcmp(argv[0], "file_name2") == 0) start = start_file_name2; /* etc */ else start = start_other; return start(argc, argv); }
这个程序为什么需要两个“main”?另外,如果有两个主函数,可执行文件如何根据文件名选择调用哪一个呢? - Shahbaz