2015-01-25 8 views
0

함수에 명령 행 인수를 전달하여 전역 변수를 채우려고합니다. 이 작업을 수행 할 때 경고 메시지 (아래 참조)와 펑키 리턴 번호 (예 : 예상 49 대신 52)가 표시됩니다.전역 변수를 채우기 위해 argv를 전달하십시오.

힌트를 주시면 감사하겠습니다. 이것은 HW입니다. 그러나 전반적인 과제 중 아주 작은 부분입니다. 암시 적 함수 선언은 main() 기능

void initializeNumJoeys(int argc, char *argv[]); 

이유 이상이 넣어

#include <stdio.h> 
#include <stdlib.h> 
#include "kangarooHeaders.h" 


int    numJoeys    = MIN_NUM_LEGAL_JOEYS - 1; 

int main (int argc, char* argv[]) 
{ 
     initializeNumJoeys(argc,argv); 
     printf("%d", numJoeys); 
} 

void initializeNumJoeys(void argc, void *argv[]) 
{ 
     char line[LINE_LEN]; 
     if (argc > MAMAS_NUM_JOEYS_CMD_LINE_INDEX) 
       numJoeys = *argv[1]; 
} 

argv_test.c:13: warning: conflicting types for ‘initializeNumJoeys’ 
argv_test.c:9: warning: previous implicit declaration of ‘initializeNumJoeys’ was here 
+0

속임수인지 확실하지 않지만 문제를 이해하는 데 도움이됩니다. http://stackoverflow.com/questions/434763/are-prototypes-required-for-all-functions-in-c89-c90-or -c99 –

+0

'void argc' ??? 'void * argv []'??? 호환 가능한 인수를'initializeNumJoeys'에 전달해야하며'void'도'int'와 호환되지 않으며'void **'는'char ** '와 호환되지 않습니다. –

답변

3

이며, 컴파일러는 initializeNumJoeys()에 대한 프로토 타입을 찾아 암시 적으로 선언하지 않습니다

int initializeNumJoeys(); 

그래서 정의를 찾으면 이전 선언과 충돌합니다.

또한

이것은

numJoeys = *argv[1]; 

또한

numJoeys = strtol(argv[1], NULL, 10); 

에, 함수 서명 잘못

void initializeNumJoeys(void argc, void *argv[]) 
      /*   ^should be int */ 

너무

void initializeNumJoeys(int argc, void *argv[]) 
로 변화 변경 0

프로토 타입을 수정하는 것을 잊지 마십시오.

+0

아, 그래! 순서가 중요합니다 - 주성분은 항상 바닥에 있어야합니다. 고마워. – user1185790

+0

'main()'이 아니라면, 아직 정의되지 않은 함수를 호출하면 컴파일러에서 함수의 이전 선언이 필요하므로 함수 또는 "_a function prototype_"을 선언 할 수 있습니다. –

+0

나는 당신의 제안을 시도했다 (편집 참조). 나는 더 이상 컴파일러 경고를받지 못하지만 여전히 잘못된 번호 (52)를받습니다. – user1185790