可变函数中的冲突类型

时间:2013-10-14 08:26:08

标签: 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_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);
}

我在test_function周围出现错误 - 'test_function'的冲突类型

有人能指出我的错误吗?

4 个答案:

答案 0 :(得分:8)

在使用之前输入test_function的声明。您需要包含stdio.h,因为您使用的是printf

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

void test_function(int args, ...);

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

答案 1 :(得分:2)

正如其他人所说的那样为test_function设置了一个原型,并注意到

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

您将字符串传递给此函数(不是int s),而是使用:

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

答案 2 :(得分:1)

我忘了为这个功能添加原型,傻我!刚刚添加

void test_function (int args, ...); 

在main()之上,它起作用了。

答案 3 :(得分:0)

为您的函数添加原型或在main()之前定义它。