在 C 中以编程方式调用 main(int argc, char **argv)

Posted

技术标签:

【中文标题】在 C 中以编程方式调用 main(int argc, char **argv)【英文标题】:Programmatically calling main(int argc, char **argv) in C 【发布时间】: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 代码竞赛)。 【参考方案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...

小心无休止的递归!

【讨论】:

我特别关注如何传递您提供了一个清晰示例的第二个参数。谢谢!

以上是关于在 C 中以编程方式调用 main(int argc, char **argv)的主要内容,如果未能解决你的问题,请参考以下文章

c编程中main函数中使用了库文件中定义的函数,编译时却提示该函数未定义,这是啥问题,坐等高手解答

c编程中main函数中使用了库文件中定义的函数,编译时却提示该函数未定义,这是啥问题,坐等高手解答

在 TableViewHeader 中以编程方式调用 IBAction

是否可以在 Dynamics CRM (2013/2016) 中以编程方式禁用审核?

在 Unity 游戏中以编程方式调用分享魅力

在 SWIFT 2.x 中以编程方式使用 NavigationController 调用 UIViewController