C언어 main 함수 ( feat. argc, char *argv[] )
안녕하세요. 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였습니다. 매우 간단한 내용이지만, 신경쓰지 않으면
그냥 그러려니 하고 넘어가기 쉬운 부분이라 잠시 올려봤습니다.
많이 사용하냐고요? 네 엄청나게 많이 사용합니다.
이번 글도 읽어주셔서 감사합니다.