【问题标题】:Programmatically calling main(int argc, char **argv) in C在 C 中以编程方式调用 main(int argc, char **argv)
【发布时间】:2020-07-08 21:22:36
【问题描述】:

假设我有一个文件test.c,它接受一个文本文件并开始如下:

int main(int argc, char **argv)
{
  ...
  return 0;
}

我通常会按如下方式编译文件并执行二进制文件:./test input.txt

现在,我希望在同一个文件的另一个函数中以编程方式调用main 函数。我应该如何进行?

【问题讨论】:

  • 为什么要调用main函数?这几乎肯定是实现您想要做的任何事情的错误方法。
  • 别这样!无论您想要做什么,都应该是一个从 main() 调用的单独函数,以及您想从其他任何地方调用它的...
  • 您是否可以选择创建一个单独的程序(带有自己的main())来调用这个程序?或者可能只是一个脚本/批处理?
  • 请注意,您根本不允许调用 main() in C++ — 但在 C 中调用它是合法的,尽管这样做是非正统的,除非在 IOCCC(国际混淆C 代码竞赛)。

标签: c arguments parameter-passing main


【解决方案1】:

你可以这样做:

#include <stdio.h>

int main(int argc, char *argv[]);

void func()
{
    char *argv[] = { "./test", "another.txt", NULL };
    main(2, argv);
}

int main(int argc, char *argv[])
{
    if (argc > 1) {
        printf("Processing %s...\n", argv[1]);
    }

    /* ... */

    func();

    return 0;
}

这应该输出如下内容:

Processing input.txt...
Processing another.txt...

小心无休止的递归!

【讨论】:

  • 我特别关注如何传递您提供了一个清晰示例的第二个参数。谢谢!
猜你喜欢
  • 2020-11-03
  • 1970-01-01
  • 2015-08-12
  • 2011-07-08
  • 2014-10-09
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2016-09-10
相关资源
最近更新 更多