char *argv[ ] 和 int argc C++ 的全球范围

Posted

技术标签:

【中文标题】char *argv[ ] 和 int argc C++ 的全球范围【英文标题】:Global reach of char *argv[ ] and int argc C++ 【发布时间】:2014-02-20 10:02:27 【问题描述】:

我有主函数:ma​​in(int argc, char *argv[])。我想在其他函数中使用这些变量:argc,argv

int function()

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

 ...
 function();
 ...
 return 0;


int function()
 
 int b=argc;
 return 0;
 

但编译器给出错误,即 argv 未声明。如何在其他函数中使用这些变量?

【问题讨论】:

我认为你的意思是“...... argc 未声明”,对吧? 调用时只需将它们作为参数传递。它们就像任何其他函数参数一样。 如果是这样,那是因为你没有将它作为参数传递给函数 拜托,拜托,停止编码,获得一本好的 C 书籍或教程并学习它。这将为您省去很多麻烦。 【参考方案1】:

将它们作为参数传递给您的函数。

int function(int argc)

   int b = argc;
   return 0;

然后打电话

function(argc);

main

【讨论】:

【参考方案2】:

当您也将其标记为 C++ 时,您可以执行以下技巧:

int argc;
char **argv;

void foo() 
    printf("argc: %d\n", argc);
    for (int i=0; i < argc; i++)
        printf("%s \n", argv[i]);


int main(int argc, char **argv)

    ::argc = argc;
    ::argv = argv;
    foo();
    return 0;

【讨论】:

【参考方案3】:

argc 和 argv 是 main 的局部变量。您可以将它们作为参数传递给其他函数。例如

int function( int );

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

 ...
 function( argc );

【讨论】:

谢谢,但是当我想使用 char *argv[] 作为函数的参数时,编译器显示错误,括号前应该有一些东西] 我使用 Visual Studio 2012【参考方案4】:

将函数声明为

int function (int argc) 
    int b = argc;
    ....

在main中调用函数

function(argc);

使用静态变量来存储您的 argc 和 argv,但不推荐这样做

在你开始之前

int g_argc;
char* g_argv[];

在你的主要功能中

g_argc = argc;
g_argv = argv;
function();

你的函数直接使用 g_argc

【讨论】:

为什么说:错误:'g_argv' 的类型不完整? @appqui-platform:因为在函数参数列表之外,数组是不等价的,你必须声明char **g_argv;【参考方案5】:

另一种选择是让两个全局变量保持与 argc 和 *argv 相同的值

【讨论】:

以上是关于char *argv[ ] 和 int argc C++ 的全球范围的主要内容,如果未能解决你的问题,请参考以下文章

int main(int argc,char *argv[])与int main(int argc,char **argv)区别?

char *argv[ ] 和 int argc C++ 的全球范围

将“argc”拼写为“argv”会导致 char ** 和 int 之间的比较 - 为啥?

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

int main(int argc,char* argv[]) 解析

int main(int argc,char* argv[])详解