Jiyong's STUDY

C언어의 main함수와 argc, argv 본문

프로그래밍/C

C언어의 main함수와 argc, argv

Kingjiyong 2018. 5. 16. 00:33

일반적으로 C언어를 처음 배울 때 보는 코드는


int main(void){

printf("Hello World! \n");

return 0;

}


이다.


여기서 main 함수를 파헤쳐 보면


int main (void)


int는 main 함수의 반환형이다.

C언어에서는 void로 선언을 해도 무관하며,

반환형이 int인 이유는, return 값을 통해서 프로그램이 정상 종료했는지 판단하기 때문이다.


일반적으로 0을 리턴하는데, 리턴값이 0인 경우엔 정상적인 종료를 했다는 의미이다.

0이 아닌 값이 리턴되었다면 이는 비정상적인 종료라는 의미를 가진다.


중간의 main은 함수의 이름이다.


그리고 마지막 void는 전달 인자를 뜻한다. void 또는 공백이라면 인자를 전달하지 않겠다는 의미이다.


하지만, void가 아니라 int argc, char *argv[]인 경우가 있다.

이것을 해석해 보면 int형 인자와 char형 더블 포인터가 있다.

하지만 char *argv[]로 표현 한 것을 보면 포인터 배열로 사용하겠다는 의미로 강조되어있다.

(전달 인자의 경우에만 더블 포인터를 포인터 배열의 형태로 작성할 수 있다.)


예제를 보면


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

int i=0;


printf("전달 받은 정보의 수: %d\n", argc);


for(i=0;i<argc;i++){

printf("%d번째: %s\n", i+1, argv[i]);


return 0;

}


입력 >> ./argcv.out Hello C Programming World!

(리눅스 환경에서의 실행. ./파일명 은 해당 파일을 실행하겠다는 의미이다.)


결과 >> 

전달 받은 정보의 수: 5

1번째: ./argcv.out

2번째: Hello

3번째: C

4번째: Programming

5번째: World!


즉 argc와 argv를 전달 인자로 받았을 때


프로그램 실행과 동시에 적는 문자열을 공백 단위로 입력받는다.

argc에는 입력받은 정보의 개수, argv엔 입력받은 내용이 저장된다.


argv의 첫번째 인덱스에는 항상 프로그램의 경로 (상대경로 또는 절대경로)가 있다.