【问题标题】:Global reach of char *argv[ ] and int argc C++char *argv[ ] 和 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 书籍或教程并学习它。这将为您省去很多麻烦。

标签: c++ c variables main


【解决方案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 相同的值

      【讨论】:

        猜你喜欢
        • 2020-11-03
        • 2013-09-08
        • 2014-01-10
        • 2011-07-08
        • 2014-10-09
        • 1970-01-01
        • 2018-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多