【问题标题】:C : write a function doesn't know how many parameterC:写一个函数不知道有多少参数
【发布时间】:2012-07-02 07:27:03
【问题描述】:

在学习 C 时,我看到 printf 在传递时可以接收许多参数。

而且我不知道 C 如何实现这样的函数,用户可以输入任意数量的参数。我也考虑过指针,但仍然没有好主意。如果有人对此类函数有任何想法,请告诉我。

【问题讨论】:

标签: c parameters variadic-functions


【解决方案1】:

需要用到va_args、va_list等。 看看这个教程。 http://www.cprogramming.com/tutorial/c/lesson17.html

这应该会有所帮助。

【讨论】:

    【解决方案2】:

    您必须在函数声明中使用... 符号作为最后一个参数。

    请参阅本教程以了解更多信息:http://www.cprogramming.com/tutorial/c/lesson17.html

    【讨论】:

    • 这是正确答案。请注意关于缺少变量参数类型检查的警告。
    【解决方案3】:
    #include <stdarg.h>
    #include <stdio.h>
    
    int add_all(int num,...)
    {
        va_list args;
        int sum = 0;
        va_start(args,num);
        int x = 0;
        for(x = 0; x < num;x++)
            sum += va_arg(args,int);
        va_end(args);
        return sum;
    }
    
    int main()
    {
        printf("Added 2 + 5 + 3: %d\n",add_all(3,2,5,3));
    }
    

    【讨论】:

      【解决方案4】:

      您使用 C varargs 编写了一个可变参数函数。您需要包含stdargs.h,它为您提供了用于迭代未知大小的参数列表的宏:va_startva_argva_end,使用数据类型:va_list

      这是一个几乎没用的函数,它打印出它的可变长度参数列表:

      void printArgs(const char *arg1, ...)
      {
          va_list args;
          char *str;
      
          if (arg1) We
      
              va_start(args, arg1);
      
              printf("%s ", arg1);
      
              while ((str = va_arg(argp, char *)) != NULL)
                  printf("%s ", str);
      
              va_end(args);
          }
      }
      
      ...
      
      printArgs("print", "any", "number", "of", "arguments");
      

      Here's 一个更有趣的例子,它展示了你可以多次迭代参数列表。

      请注意,使用此功能存在类型安全问题; wiki article 解决了其中的一些问题。

      【讨论】:

        猜你喜欢
        • 2012-01-05
        • 2019-03-21
        • 2011-06-17
        • 2019-07-27
        • 1970-01-01
        • 1970-01-01
        • 2011-03-10
        • 2011-01-30
        • 2011-11-01
        相关资源
        最近更新 更多