C 프로그램은 실행될 때 명령줄(command line)에서 값을 전달받을 수 있습니다. 이렇게 전달되는 값들을 명령줄 인수(command line arguments)라고 부르며, 프로그램 내부에 값을 하드코딩하는 대신 외부에서 프로그램의 동작을 제어하고 싶을 때 매우 유용하게 활용됩니다.
명령줄 인수는 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");
}
}위 코드의 동작 방식을 살펴보면 다음과 같습니다.
- argc == 2: 프로그램 이름(argv[0])을 제외하고 인수가 정확히 하나 전달된 경우, 해당 인수(argv[1])를 출력합니다.
- argc > 2: 인수가 두 개 이상 전달된 경우, 너무 많은 인수가 전달되었다는 메시지를 출력합니다.
- 그 외(argc == 1): 인수가 전혀 없는 경우, 하나의 인수가 필요하다는 메시지를 출력합니다.
실행 결과 1 — 인수가 하나인 경우
$./a.out testing The argument supplied is testing
프로그램 이름 뒤에 'testing'이라는 인수 하나를 전달했기 때문에 argc는 2가 되고, argv[1]에 저장된 값이 그대로 출력됩니다.
실행 결과 2 — 인수가 두 개 이상인 경우
$./a.out testing1 testing2 Too many arguments supplied.
두 개의 인수를 전달하면 argc가 3이 되어 'Too many arguments supplied.'라는 메시지가 출력됩니다.
실행 결과 3 — 인수가 없는 경우
$./a.out One argument expected
아무 인수도 전달하지 않으면 argc는 1이 되며, 인수가 필요하다는 안내 메시지가 출력됩니다.
참고 사항
argv[0]에는 항상 프로그램 자체의 이름이 저장되므로, 실제로 전달된 인수는 argv[1]부터 시작됩니다. 따라서 argc 값은 최소 1이며, 인수를 하나 전달하면 argc는 2가 됩니다. 이러한 구조를 이해하면 파일 경로, 옵션 설정 등 다양한 값을 외부에서 유연하게 받아 처리하는 프로그램을 작성할 수 있습니다.