Programming/C

C언어 - main()함수에 인자가 있을 때

경원구 2016. 5. 24. 10:00

<main()함수의 인자>

지금까지 공부했던 것에는 main함수에 인자는 없고 계속 void형이었다.

만약, main함수에는 인자가 있다면 어떻게 될까?

맨 처음 main함수의 인자는 프로그램을 실행할때 문자열을 띄어 쓰기 단위로 배열에 저장된다고 배웠을 것이다앞에 int형이니 어떤 (0 혹은 1)을 운영체제에게 반환해야된다고 배웠다

처음엔 이게 언제 어떻게 왜 사용되는 지도 모르고 배웠을 것이며, 지금부터 그것을알아보자!

main()함수의 인자는 shutdown -t 과 같이 옵션을 지정할때 쓰인다.

명령 행 컴파일러도 옵션을 줘서 내가 원하는 대로 프로그램을 실행 가능하게 할수 있다.

말그대로 옵션을 지정하는데 쓰인다.

무슨말인가? main()함수말고 리눅스 혹은 명령 프롬프트에 명령어를 입력했다고 가정해보자.

예를 들어 shutdown -t now 이런 명령어를 입력했다고 가정하였을 때, shutdown 이라는것은 명령어이며 -tnow는 옵션들이다. 사람들이 임의로 넣어준 옵션이다.

자 이제 main함수로 돌아가 어떻게 작동하는지 알아보자.

int main(int argc, char* argv[]) 이렇게 되어 있다고 하자.

첫번째, int argc는 사용자가 명령 프롬프트에서 입력한인자의 개수를 카운트하고,

두번째 char* argv[]는 명령 프롬프트 창에서 받은 인자를 공백을 기준으로 배열로 반환한다.

 

<실습>




-결과-

위 결과를 보면 test.exe를 실행하기 전에 인자로 -h-a를 넣었다. 그렇게 되면

int main(int argc, char* argv[])에 있는 인자 argc에는 입력한 인자의 개수가 들어가고, char* argv[]에는 배열을 생성해 argv[0]에는 test.exe가 있는경로, argv[1]에는 첫번째 입력한 인자 -h, argc[2]에는 두번째 입력한 인자 -a 이런식으로 저장이 되어 출력된다.

 

이것을 이용해 각 명령어들의 옵션을 지정해주면 어떨까?

간단한 실습을 통해 알아보자


<실습>

 


 

-결과-

해설을 해보면, argv[]라는 배멸에 test.exe뒤에 사용자가 임의로 입력한 옵션들은 다 저장이 된다. 그 중에, 맞는 것만 strcmp를 사용해서 출력하는 코딩이다.

다른 명령어들은 이런식으로 어떤 특정 명령어에 대해서만 반응하고 다른 명령어들은 반응하지 않는 식일 것이다.