char *argv []和int argc c 的全局覆盖范围

Global reach of char *argv[ ] and int argc C++

本文关键字:全局 覆盖 范围 argc int argv char      更新时间:2023-10-16

我已经拥有主函数: 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 未申报。如何在其他功能中使用这些变量?

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

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

并致电

function(argc);

main

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

int argc;
char **argv;
void foo() {
    printf("argc: %dn", 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;
}

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

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

将函数声明为

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

主要呼叫功能,例如

function(argc);

使用静态变量存储您的argc和argv,但这不是建议

在您

之前
int g_argc;
char* g_argv[];

在您的主要功能中

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

int您的功能只需直接使用g_argc

另一种选择是使两个全局变量保持与argc和 *argv

相同的值