네, C 언어에서는 main() 함수에 인수를 전달할 수 있습니다. 이를 명령줄 인수(Command Line Arguments)라고 부르며, 프로그램 실행 시 운영체제의 명령줄에서 프로그램 이름 뒤에 입력한 값들이 프로그램으로 전달됩니다.
main() 함수로 전달할 수 있는 인수는 두 가지입니다.
- argc(argument count): 명령줄에서 전달된 인수의 개수를 저장합니다.
- argv(argument vector): 전달된 각 인수를 문자열 배열 형태로 저장합니다.
흥미로운 점은 main() 함수가 개발자가 직접 호출하는 것이 아니라, 터미널에서 프로그램을 실행할 때 운영체제(또는 셸 프로그램)가 호출한다는 것입니다. 이때 명령줄에 입력된 값들이 자동으로 main() 함수에 넘겨지게 됩니다.
기본 문법
명령줄 인수를 받는 main() 함수의 기본 문법은 다음과 같습니다.
int main(int argc, char *argv[]){
// 코드 작성
return 0;
}여기서 argc는 int형 정수이고, argv는 문자열 포인터 배열(char *argv[])입니다. argv[0]에는 항상 프로그램 이름 자체가 저장되므로, 실제 사용자가 입력한 인수는 argv[1]부터 시작됩니다.
예제 코드
다음 예제는 프로그램에 전달된 모든 인수를 출력합니다.
#include<stdio.h>
int main(int argc, char *argv[]){
int i;
for (i = 0; i < argc; i++) {
printf("Arg %d: %s\n", i, argv[i]);
}
return 1;
}실행 결과
Arg 0: G:\CP\CP programs\main with arguments.exe
결과 해설
위 프로그램은 프로그램 이름 자체를 포함하여 명령줄에서 전달된 모든 인수를 순서대로 출력합니다. 실행 결과에서 볼 수 있듯이 argv[0]에는 실행 파일의 경로와 파일명이 저장되어 있는 것을 확인할 수 있습니다.
예를 들어 터미널에서 다음과 같이 실행하면,
./program hello world 123
argc는 4가 되고, argv[0]은 "./program", argv[1]은 "hello", argv[2]는 "world", argv[3]은 "123"이 됩니다. 이처럼 명령줄 인수를 활용하면 프로그램 실행 시점에 외부 값을 유연하게 받아 처리할 수 있어 실용적인 프로그램 작성에 매우 유용합니다.