【问题标题】:How to call main() from other functions in C如何从 C 中的其他函数调用 main()
【发布时间】:2016-07-25 06:26:29
【问题描述】:

我正在研究 C 和 C++ 的差异,我发现了一个棘手的问题。请您详细说明以下几点:

  1. 在C语言中,我们可以通过其他函数调用main()函数。
  2. 在C++中,我们不能通过其他函数调用main()函数。

如何从另一个函数调用main(),它的用例是什么?

【问题讨论】:

  • 可以,但这不是一个好习惯。如果您愿意,请创建另一个具有相同签名的函数并调用它。
  • 怎么样?只需写main()main(argc, argv)。与其他功能没有区别
  • 现实世界中没有从另一个函数AFAIK调用main的用例。
  • 恕我直言,用例是:1. 一种非常糟糕的方式来运行循环,同时轰炸堆栈以试图让机器瘫痪...... 2. 糟糕的递归参数解析。 .. C++ 认为它应该保护自己免受无法编写 while 循环的人的侵害是有原因的...

标签: c main


【解决方案1】:

@TrevorHickey 一针见血(他的答案去了哪里?) - C++ 禁止在不同的函数中调用main(有充分的理由)......并不是说任何编译器都可能阻止你(我不要认为他们中的大多数人在乎)。

按照@KlasLindbäck 的建议,一个明显的解决方法是将main 的功能移动到容器函数中并从那里调用它。

int my_application(int argc, char const * argv[]) {
   // do stuff
   return 0;
}

int main(int argc, char const * argv[]) {
   return my_application(argc, argv);
}

另一个“hack”可能只起作用,因为编译器无论如何都允许您调用main(正如@KlasLindbäck 在 cmets 中所指出的那样),将是使用函数指针。即

int main(int argc, char const * argv[]) {
   // do stuff
}

// shouldn't compile... but hey, you never know.
int (*prt_to_main)(int, char const* argv[]) = main;

void test_run(void) {
   prt_to_main(0, NULL);
}

【讨论】:

  • 我认为任何足够宽松的编译器允许将main 的地址转换为函数指针也足够宽松,允许您直接调用它。 GCC 就是这样一个例子。
  • @KlitosKyriacou,我完全同意。我不认为他们中的大多数人会做更多的事情然后发出警告......我没有尝试过(我看不出以任何方式致电main 没有好处)。
  • 你不能在没有参数的情况下调用my_application()
猜你喜欢
  • 2013-01-12
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
相关资源
最近更新 更多