각 함수에는 인수(파라미터)를 지정할 수 있습니다. 프로그램 본체인 main() 함수에도 당연히 인수를 지정할 수 있습니다. 메인 함수의 인수는, 운영체제에서 그 프로그램을 실행할 때 지정해 준 "옵션"입니다.
예를 들어 도스창(명령 프롬프트;CMD.EXE)에서
dir /?
이렇게 하면 dir 명령에 대한 도움말이 출력됩니다. 이때 "/?" 라는 문자열이 옵션이 되는 것입니다.
main(int argc, char* argv[])
에서
argc 는, 프로그램을 실행할 때 지정해 준 "명령행 옵션"의 "개수"가 저장되는 곳입니다.
argv 는, 프로그램을 실행할 때 지정해 준 "명령행 옵션의 문자열들"이 실제로 저장되는 배열입니다.
다음 예제를 보면 쉽습니다.
int argc, char* argv[] 사용법 예제; main() Option Example
소스 파일명: 0.cpp
#include <stdio.h>
#include <stdlib.h> // exit()
int main(int argc, char* argv[]) {
// 옵션 지정하지 않았을 때 에러 출력하고 종료
if (argc == 1) {
fputs("에러! 옵션을 입력하지 않으셨군요...\n", stderr);
exit(1);
}
// 옵션 개수 출력
printf("%d 개의 옵션을 입력하셨군요\n\n", argc - 1);
// 옵션 배열의 요소들을 하나씩 출력
for (int i = 1; i < argc; i++)
printf("argv[%d] = %s\n", i, argv[i]);
return 0;
}
#include <stdlib.h> // exit()
int main(int argc, char* argv[]) {
// 옵션 지정하지 않았을 때 에러 출력하고 종료
if (argc == 1) {
fputs("에러! 옵션을 입력하지 않으셨군요...\n", stderr);
exit(1);
}
// 옵션 개수 출력
printf("%d 개의 옵션을 입력하셨군요\n\n", argc - 1);
// 옵션 배열의 요소들을 하나씩 출력
for (int i = 1; i < argc; i++)
printf("argv[%d] = %s\n", i, argv[i]);
return 0;
}
컴파일 및 실행 결과 화면:
D:\Z>cl /nologo 0.cpp
0.cpp
D:\Z>0.exe
에러! 옵션을 입력하지 않으셨군요...
D:\Z>0.exe 111 222
2 개의 옵션을 입력하셨군요
argv[1] = 111
argv[2] = 222
D:\Z>0.exe AAA BBB CCC
3 개의 옵션을 입력하셨군요
argv[1] = AAA
argv[2] = BBB
argv[3] = CCC
D:\Z>0.exe 자장면 탕수육 짬뽕 불도장 팔보채
5 개의 옵션을 입력하셨군요
argv[1] = 자장면
argv[2] = 탕수육
argv[3] = 짬뽕
argv[4] = 불도장
argv[5] = 팔보채
D:\Z>
0.cpp
D:\Z>0.exe
에러! 옵션을 입력하지 않으셨군요...
D:\Z>0.exe 111 222
2 개의 옵션을 입력하셨군요
argv[1] = 111
argv[2] = 222
D:\Z>0.exe AAA BBB CCC
3 개의 옵션을 입력하셨군요
argv[1] = AAA
argv[2] = BBB
argv[3] = CCC
D:\Z>0.exe 자장면 탕수육 짬뽕 불도장 팔보채
5 개의 옵션을 입력하셨군요
argv[1] = 자장면
argv[2] = 탕수육
argv[3] = 짬뽕
argv[4] = 불도장
argv[5] = 팔보채
D:\Z>
옵션을 하나도 입력하지 않으면 argc 는 1이 됩니다. 즉 argc 는 항상 1 이상입니다. 0이 되지 않습니다.
위의 경우, argv[0]은 0.exe 가 됩니다. 즉 argv 의 첫번째 요소는 항상 "프로그램 자신의 파일명"입니다.
따라서 옵션의 정확한 개수를 구하려면 argc 에서 1을 마이너스해 주어야 합니다.
Q: 비주얼C (VC++) 에서만 되나요?
모든 C컴파일러에서 다 됩니다.
'Stupid Computer > 2. C 언어' 카테고리의 다른 글
[C/C++] switch case문 10개 이상 만들기 ! (0) | 2014.03.24 |
---|---|
[json/cjson] json_object_is_type 사용법 (0) | 2014.03.06 |
[C/C++/리눅스/자바] Json 사용법 및 사용예제 (0) | 2014.02.28 |
[C/C++] 기본! 컴파일과 빌드~ 차이점 (0) | 2014.02.28 |
[링크에러 LNK2019] C++에서 C 함수 사용하기 (0) | 2014.02.26 |
윈7에서 비쥬얼 스튜디오 환경변수 설정!!(변수추가) (0) | 2013.06.30 |
[C++] 소셜네트워크서비스 ! SNS 코딩하기, 코딩 프로젝트 예제 ! (3) | 2013.05.29 |
C++ Class개념과 생성자 ! (예제) (0) | 2013.05.18 |
strtok 함수 사용 ! (문자열 토큰단위로 짜르고 배열에 저장) (0) | 2013.05.17 |
소스파일,헤더파일 나누기! (0) | 2013.05.13 |