【发布时间】:2010-01-02 08:00:13
【问题描述】:
我可以用 C 或 C++ 编写具有两个主要功能的程序吗?
【问题讨论】:
-
您希望他们做什么?应该调用哪一个?
-
套用孔子的话,千里之行始于一个入口。你不能有两个 main()s。
-
不知道是否相关,但某些程序(例如busybox)有一个 main() 实现,它检查 argv[0] 的值,然后调用相关的 something_else_main() 函数,具体取决于 argv [0] 的值。这样,您可以根据文件名以完全不同的方式拥有单个可执行文件。与符号链接一起使用,这可以节省磁盘空间,因为不需要在多个可执行文件中复制共享代码。 (共享库也可以做同样的事情,但维护起来比较麻烦)
-
@JeremyFriesner,
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); }你想要两个mains 有什么问题?另外,有两个 main 如何使可执行文件根据文件名选择调用哪一个? -
@Shahbaz 我可以看到该代码没有任何问题,尽管函数指针的使用并非绝对必要 - 即您可以只调用 start_file_name1(argc,argv) [等] 如果您愿意,可以直接从 if-then 子句中获取。至于有两个 main(),你真的不能这样做,因为你会得到一个链接错误(重复的函数名称)。但是你可以有几个类似于 main() 但调用别的函数的函数,而 main() 调用它们(就像在你的例子中一样)。