임베디드 리눅스

C언어 main 함수 ( feat. argc, char *argv[] )

개발자_WH 2022. 2. 4. 15:29
728x90
반응형
반응형

 

안녕하세요. WH입니다.

오랜만에 기본적인 코딩을 하다가

문득 옛날 생각이 나서 이 글을 써봅니다.

 

아래 코딩을 보면서 시작하겠습니다.

int main(void)
{
return 0;
}

int main(int argc, char *argv[])
{
return 0;
}

메인 함수에 전달 인자가 있다?

리눅스 계열에서는 매우 많이 사용하지만, 여튼 우리는 메인함수에 전달인자를 주는 경우가 있습니다. 그런데 아마도 이런 말을 들어보셨을 겁니다.

 

" 프로그램을 구동하면 main 함수부터 시작한다. "

 

그런데 이상합니다. main 함수부터 시작하는데 어떻게 매개변수를 받죠? 정답은 파일을 실행할 때 값을 적어주면 그 값이 전달됩니다. 말로만하니까 이해가 잘 안가죠?

 

예를 들어, testserver.c 라는 코드가 있고 이를 server라는 파일로 컴파일했다고 해봅시다. 그런데 testserver.c 파일을 보니 포트 번호를 전달해 줘야한다고 해봅시다. 예시 코드가 없어서 힘들다구요? 아래 글에서 코드 부분만 보시길 바랍니다. 해당 부분에 argv[1] 이라는 부분이 있을겁니다. 여튼 해당 코드는 서버에 포트 번호를 전달해 줘야 합니다.

2022.02.04 - [임베디드 리눅스] - 네트워크 프로그래밍-소켓 통신 서버 구현 3

 

$ gcc testserver.c -o server

( gcc로 컴파일하고 실행파일 명은 server입니다 )

$ ./server 3333

( argv[1] 인자에 3333을 전달합니다 )

 

어라 그럼 argv[0] 은요? argv[0]에는 프로그램의 실행 경로가 들어 있습니다. 학습을 위해 간단한 예시 코드를 하나 보여드리겠습니다.

#include <stdio.h>

int main(int argc, char * argv[])
{
printf("argc is %d.\n", i)
    for( int i = 0; i<argc; ++i)
        {
        	printf("argv[%d] is %s\n",i,argv[i]);
    	}
    return 0;
}

뭐 이런 정말 학습을 위한 코드랄까요? 소스 코드 명은 learn.c 라고 해봅시다.

 

$ gcc learn.c -o test

$ ./test hi i am WH

 

라고 실행을 하면 

 

argv[0] is 실행경로

argv[1] is hi

argv[2] is i

argv[3] is am

argv[4] is WH

 

라는 결과를 보실 수 있을 겁니다. 그래서 argc와 argv[]가 뭐냐고요?

 

argc

  - 메인함수에 전달되는 정보의 수

argv[]

- 메인함수에 전달되는 실질적 정보이며, 문자열의 배열 ( argv[0]은 실행경로로 고정 )

 

이상 WH였습니다. 매우 간단한 내용이지만, 신경쓰지 않으면

그냥 그러려니 하고 넘어가기 쉬운 부분이라 잠시 올려봤습니다.

많이 사용하냐고요? 네 엄청나게 많이 사용합니다.

이번 글도 읽어주셔서 감사합니다.

728x90
반응형