C 变分函数中的冲突类型

C 变分函数中的冲突类型,c,variadic-functions,C,Variadic Functions,在为一个项目工作了很长一段时间后,我又在和C一起工作,我试图了解可变函数。基本上,我希望能够将大量字符串传递给函数 #include<stdarg.h> int main(int argc, const char * argv[]) { test_function(2,"test","test2"); test_function(4,"test3","test4","test5","test6"); return 0; } void test_fun

在为一个项目工作了很长一段时间后,我又在和C一起工作,我试图了解可变函数。基本上,我希望能够将大量字符串传递给函数

#include<stdarg.h>

int main(int argc, const char * argv[])
{

    test_function(2,"test","test2");
    test_function(4,"test3","test4","test5","test6");

    return 0;
}


void test_function(int args, ...)
{
    va_list ap;
    va_start(ap, args);

    int i;
    for(i=0;i<args;i++)
    {
        printf("Argument:%s\n",va_arg(ap, char*));
    }

    va_end(ap);
}
#包括
int main(int argc,const char*argv[]
{
测试功能(2,“测试”、“测试2”);
test_函数(4,“test3”、“test4”、“test5”、“test6”);
返回0;
}
无效测试函数(int参数,…)
{
va_列表ap;
va_启动(ap、args);
int i;

对于(i=0;i请在使用函数之前声明
test\u
。由于您使用的是
printf
,因此还需要包含
stdio.h

#include <stdarg.h>
#include <stdio.h>

void test_function(int args, ...);

int main(int argc, char * argv[])
{
#包括
#包括
无效测试_函数(int args,…);
int main(int argc,char*argv[])
{

要么为函数添加一个原型,要么在
main()之前定义它。
我忘了为函数添加一个原型,傻我!刚刚添加

void test_function (int args, ...); 

正如其他人所说,为
测试函数
放置一个原型,也请注意

 printf("Argument:%s\n",va_arg(ap, int));
将字符串传递到此函数(不是
int
s),而是使用:

 printf("Argument:%s\n",va_arg(ap, char *));

您没有
test\u函数的原型
,编译器在
main()
中发现时隐式声明它为
int test\u函数()
。然后它遇到
void test\u函数(int,…)
。它们不一样。刚刚发现了!谢谢哇!你为什么只使用
va\u arg(ap,int)呢
而不是
va_arg(ap,char*)
?这是代码中的一个错误,因为我相信它是在调试阶段更改的。谢谢于浩。我的源代码中有这一点。6年后回到C将是一个挑战。我已经太习惯了其他高级语言及其舒适性。这是对的。但是,正如其他人告诉你的,你的anser没有添加任何内容值。反过来,您可以接受✓ 另一个答案。我在一段时间内无法接受答案。我一定是在那之后忘记了。嗯,那可能发生:-)