본문 바로가기
프로그래밍/C/C++/C#

C/C++ 코딩시 main에 인자 넘기고 처리하는 방법

by choies1 2010. 6. 5.

C 프로그램을 할 때
//main.cvoid main(){  printf("Hello!! World\n");}
의 형태로 main()을 시작할 수도 있지만
//main.cint main(int argc, char *argv[]){  printf("Hello!! World\n");  return 1;}
과 같이 인자를 넘길 수는 있는 형태로도 할 수도 있다.

이와 같은 구조는 C언어를 처럼 배울때 대부분 배우게 되지만,
프로로그램 시작시에 인자를 넘길 일이 별로 없다보면 시간이 지나면서
사용방법을 잊게 된다.

그리서 이번에는 C코드를 int main(int argc, char *argv[]) 로 시작해서 인자를 넘기고 코드안에서
처리하는 방법에 대해서 정리하고자 한다.

아래는 컴파일 수 프로그램 시작이 문자열들을 넘기는 테스트를 위한 코드이다. 전체 argument의 개수를 표시하고, argument로 넘어온 문자열을 표시한 후에 string compare를 통하여 일치하는 값을 출력하는 예제이다.
(주의: strcmp는 두값이 일치하면 0이 리턴된다) 
//main.c#include <stdio.h>#include <string.h>int main(int argc, char *argv[]){  int i=0;  printf("The Number of arguments(argc) = %d\n", argc);  for(i=0; i<argc; i++)  {    printf("%s \n", argv[i]);  }  if(strcmp(  argv[1], "test" ) == 0)  {    printf("==> First arguemnt is 'test'  \n");  }  return 0;}

결과 화면은 아래와 같다.

[프로그램 실행 (3개의 문자열 'test abc 123'를 넘김)]
D:\C_code>main_arg.exe test abc 123

[프로그램 실행 결과]
The Number of arguments(argc) = 4
d:/c_code/main_arg.exe
test
abc
123
==> First arguemnt is <test>
결과를 보면 알겠지만 주의할 것은 프로그램을 실행하기 위한 파일명도 argv[0]의 문자열 값으로 넘어가게 된다는 것이다.
따라서 3개의 argument를 넘겼는데도, argument 개수를 나타내는 argc의 개수는 4개가 되었다.
여기서 사용자가 생각하는 첫번째 argument의 문자열은 argv[1]가 된다는 것을 기억하면 된다.

argument와 strcmp 기능을 잘 이용하면 하나의 프로그램으로 여러가지 기능을 수행할 수 있도록 코딩한 후에 실행할 때 argument를 다르게 넘겨서 각각 다른 프로그램을 실행하는 것처럼 할 수 있다.

특히 이 기능은 임베디드 시스템에서 테스트 코딩 시에 유용하게 이용할 수 있다.