2013-10-14 3 views
-2

Я снова работаю с 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

Может кто-нибудь мне точку в моей ошибки?

+2

Вы не прототип для 'test_function', компилятор неявно объявляет его как' int test_function() 'при обнаружении в' main() '. Затем он встречает 'void test_function (int, ...)'. Они не то же самое. – WhozCraig

+0

Только что понял! Спасибо Whoz! – A23

+0

Любая причина, по которой вы wronly используете 'va_arg (ap, int)' вместо 'va_arg (ap, char *)'? – glglgl

ответ

8

Перед использованием его следует поместить объявление test_function. Вам необходимо включить stdio.h, так как вы используете printf.

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

void test_function(int args, ...); 

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

Спасибо Ю. Хао. У меня это в моем источнике. Возвращение к C через 6 лет будет проблемой. Я слишком привык к другим языкам высокого уровня и их комфорту. – A23

0

Либо поставить прототип для функции или определить его перед main().

1

Я забыл добавить прототип функции, глупо меня! Just added

void test_function (int args, ...); 

над основным() и он работал.

+0

Это правильно. Но, как вам сказали другие, этот ваш anser не добавил сюда никакой ценности. В свою очередь, вы могли бы принять ✓ один из других ответов. – glglgl

+0

Я не мог принять ответ на определенный период. Я, должно быть, забыл об этом. – A23

+0

Ну, это может случиться :-) – glglgl

2

Как уже сказал поставить прототип test_function, также отмечают, что в

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

вы передаете строки этой функции (не int с), вместо этого использовать:

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

Я продолжал настраивать источник, чтобы изолировать мою ошибку. Благодаря! – A23

+0

+1 для определения ошибки, которая не задана. –

+0

@YuHao, спасибо;) –

Смежные вопросы