【问题标题】:Arbitrary number of arguments in printf(). What is this called in C programming?printf() 中的任意数量的参数。这在 C 编程中叫什么?
【发布时间】:2012-08-26 23:15:17
【问题描述】:

当我们使用 printf() 和不同数量的参数时,例如

printf("Hello");

printf("%d",a);

printf("%d%d",b,c);

为什么这不称为“重载”(使用相同的方法执行不同的任务)? 如果是重载,那为什么C不被认为是一种面向对象的编程语言呢?

【问题讨论】:

  • printf 是一个函数,而不是一个方法。方法是类的函数。类是“面向对象编程”语言的概念。 C 确实只有结构,但您可以在 C 中使用面向对象的概念进行编程。
  • 您可以通过stdarg.h使用此功能

标签: c


【解决方案1】:

这称为variadic function,而不是重载。重载与面向对象无关。

【讨论】:

    【解决方案2】:

    为什么不叫“重载”

    因为您使用的是相同的功能

    int printf(const char *restrict format, ...);
    

    重载的一个先决条件是具有相同名称的不同函数/方法。在这里,我们只有一个函数,尽管由于可变参数功能而非常通用。

    【讨论】:

      【解决方案3】:

      这不是方法重载。碰巧printf 接收到一个可选的vargs 作为第二个参数,即变量参数列表。

      int printf ( const char * 格式, ... );

      将格式化的数据打印到 stdout 将数据序列写入标准输出 (stdout) 按照格式参数指定的格式进行格式化。格式化后 参数,该函数至少需要同样多的附加参数 按照格式指定。

      【讨论】:

        【解决方案4】:

        面向对象编程是指一种范式,包括封装、消息传递、继承和多态。换句话说,OO 意味着定义一个带有virtual 函数的class,这些函数被覆盖。这与重载不同,后者是根据参数的类型在函数中执行不同的动作。

        printf() 所做的既不是重载也不是覆盖。这是一个可变长度的参数列表。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-31
          • 2011-05-18
          • 1970-01-01
          • 1970-01-01
          • 2020-03-18
          • 1970-01-01
          • 2017-06-14
          • 1970-01-01
          相关资源
          最近更新 更多