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 【问题描述】:我有主函数:main(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[])