如何使用 argc 和 argv 调用函数?

Posted

技术标签:

【中文标题】如何使用 argc 和 argv 调用函数?【英文标题】:How to call a function with argc & argv? 【发布时间】:2014-09-15 10:20:05 【问题描述】:

我目前正在尝试使用 QT 为现有的命令行程序创建 GUI,作为学习练习。

原始代码是用 c 编写的,我已经包含了 c++ 位的 c 包装器。我拿了原版

int main(int argc, char **argv)

并把它变成一个正常的功能(改变了名字)。

我有几个 qt 复选框用作输入,(例如 -v 在 cmdline 中激活了详细,所以现在我有一个详细的复选框,使 char verbose = 到“v”)

还有其他几个带数字的参数,例如 -t 4 表示 4 个线程。

原程序中的选项是这样实现的:

while ((opt = getopt(argc, argv, "vqnrik1eE:P:NTX:F:t:h?f:o:s:")) != -1) 
    switch (opt) 
case 'v':
        verbose = 2;
        break;

如何将所有这些不同的选项称为标准函数?我可以将整个参数写入一个大字符串并在可能的情况下将其输入,但我该怎么做呢?

谢谢,

【问题讨论】:

meta.stackexchange.com/questions/129598/… 命令行程序在做什么?它总是运行得很快(即不到十分之一秒)吗?如果它可以在几秒钟内运行,那么您的方法是错误的(您不能将 GUI 冻结几秒钟) 【参考方案1】:

您可能应该远离参数并直接设置控制变量:

if(verboseCheckBox->checked())
    verbose=2;

//etc.

【讨论】:

【参考方案2】:

只需像这样调用一个字符串数组:

char* argv[4] = executing_path, "-t 4","v","random_argument";
const int argc = sizeof(argv)/sizeof(char*);
main(argc, argv);

请注意,第一个参数通常是您在主函数中收到的可执行文件的完整路径。如果可能的话,我会保持同样的行为;有时,代码解析参数在1... n-1 范围内执行,因此会跳过数组中的第一个值。

既然您知道该怎么做,我也建议您不要这样做。由于您已经在源代码中,您可能应该使用直接方法调用来将选项设置为他的回答中解释的棘轮怪胎。

【讨论】:

以上是关于如何使用 argc 和 argv 调用函数?的主要内容,如果未能解决你的问题,请参考以下文章

将argv和argc传递给线程

Swig + Lua:调用 m(int argv, char **argc)

带有自定义 argc 和 argv 的 getopt_long() 函数

服务器

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

如何从库函数中访问 c​​++ 中的 argc 和 argv