“...”在 C 中作为函数参数有什么作用?

问题描述

我一直想知道 C 的 printf 函数是如何工作的,所以我决定查看 gcc 的 stdio.h 中的定义。令我惊讶的是,gcc 中的 printf 函数是用参数“const char*,. . . ”定义的。我尝试在我制作的一个简单程序中为自己做这件事。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int Print(const char *text,...) {

    printf("%s\n",text);
}

int main() {
    Print("Hello,World!","a");
}

我可以将任何我想要的参数传递给它,即使这些参数将来没有任何访问点。我想知道更多关于这个,我想知道是否有人有更多的信息。

解决方法

这就是 ISO C 定义用于声明函数以采用可变数量或类型的参数的语法的方式。 使用带有 stdarg.h 的 ... 表示法,您可以实现可变参数函数:接受无限数量参数的函数。它的用法在 Gnu 库 manual 中有解释。

您可以使用 stdarg.h 中的 va_args 来检查参数。 Here 是很好的入门教程。

您还可以实现可变参数宏 SOME_MACRO(...)。为此,您可以参考此thread