2013-10-14 4 views
-2

저는 오랫동안 프로젝트를 위해 C와 다시 작업 중이며 가변적 인 함수에 대한 내 머리를 얻으려고합니다. 기본적으로 함수에 여러 문자열을 전달할 수 있기를 원합니다.variadic 함수의 충돌 유형

#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'에 대한 프로토 타입 인 경우, 컴파일러는'main()'에서 발견되면 암시 적으로'int test_function()'으로 선언합니다. 그런 다음'void test_function (int, ...)'를 만나게됩니다. 그들은 동일하지 않습니다. – WhozCraig

+0

그냥 알아 냈어! 고마워요 Whoz! – A23

+0

'va_arg (ap, char *)'대신'va_arg (ap, int)'를 쓸모없는 이유는 무엇입니까? – glglgl

답변

8

test_function 선언을 사용하십시오. printf을 사용하고 있으므로 stdio.h도 포함해야합니다.

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

void test_function(int args, ...); 

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

유우 하오 감사합니다. 나는 그것을 나의 근원에 가지고있다. 6 년 후에 C로 돌아 오는 것이 어려울 것입니다. 나는 다른 고급 언어와 그들의 편안함에 너무 익숙해 져있다. – A23

0

함수에 대한 프로토 타입을 넣거나 main() 앞에 정의하십시오.

1

기능에 대한 프로토 타입을 추가하는 것을 잊어 버렸습니다. 바보 같은 저요! 방금 추가 된

void test_function (int args, ...); 

위의 main()은 작동했습니다. 다른 사람이 test_function에 대한 프로토 타입을 넣어 말했듯이

+0

이것은 옳다. 그러나 다른 사람들이 이것에 대해서도 이야기했듯이,이 anser는 여기에 어떤 가치도 추가하지 않았습니다. 차례로, 당신은 다른 답 중 하나를 받아 들일 수 있습니다. – glglgl

+0

특정 기간 동안 답변을 수락 할 수 없습니다. 나는 그 후에 잊어 버렸을 것입니다. – A23

+0

음, 그럴 수 있습니다 :-) – glglgl

2

는 또한

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

에서이 기능 (하지 int들)에 문자열을 전달하는 점에 유의 대신 사용

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

나는 내 오류를 격리하기 위해 소스를 조정했다. 감사! – A23

+0

+1 묻지 않은 오류를 찾아내는 데 사용합니다. –

+0

@YuHao, 감사합니다;) –