C 언어 명령행 인자 마스터하기: 실전 가이드
C 프로그램이 실행될 때 명령행에서 프로그램으로 값을 전달할 수 있습니다. 이러한 값을 명령행 인자라고 하며, 값을 코드 내에 하드코딩하는 대신 외부에서 프로그램을 제어하고 싶을 때 특히 중요합니다.
명령행 인자는 main() 함수의 인자로 처리되며, argc는 전달된 인자의 개수를, argv[]는 프로그램에 전달된 각 인자를 가리키는 포인터 배열입니다. 명령행에서 인자가 제공되었는지 확인하고 그에 따라 동작하는 간단한 예제입니다.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc == 2) {
printf("The argument supplied is %s\n", argv[1]);
} else if (argc > 2) {
printf("Too many arguments supplied.\n");
} else {
printf("One argument expected.\n");
}
}
위 코드를 컴파일하고 단일 인자로 실행하면 다음과 같은 결과가 나옵니다.
$./a.out testing
The argument supplied is testing
두 개의 인자로 실행하면 다음과 같은 결과가 나옵니다.
$./a.out testing1 testing2
Too many arguments supplied.
인자 없이 실행하면 다음과 같은 결과가 나옵니다.
$./a.out
One argument expected
argv[0]에는 프로그램 이름 자체가 저장되고, argv[1]은 첫 번째 명령행 인자를 가리키며, *argv[n]이 마지막 인자입니다. 인자가 없으면 argc는 1이고, 인자를 하나 전달하면 argc는 2가 됩니다.
모든 명령행 인자는 공백으로 구분하여 전달하지만, 인자 자체에 공백이 포함된 경우 큰따옴표("")나 작은따옴표('')로 감싸서 전달할 수 있습니다. 프로그램 이름을 출력하고 공백이 포함된 인자를 큰따옴표로 감싸서 전달하는 예제를 다시 작성해 보겠습니다.
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Program name %s\n", argv[0]);
if (argc == 2) {
printf("The argument supplied is %s\n", argv[1]);
} else if (argc > 2) {
printf("Too many arguments supplied.\n");
} else {
printf("One argument expected.\n");
}
}
위 코드를 컴파일하고 공백으로 구분된 단일 인자를 큰따옴표로 감싸서 실행하면 다음과 같은 결과가 나옵니다.
$./a.out "testing1 testing2"
Program name ./a.out
The argument supplied is testing1 testing2