명령행 인자란
make나 clang 같은 프로그램을 실행할 때 컴파일할 코드 외에도 파일명 같은 추가 정보를 함께 줄 수 있다.
이런 정보를 명령행 인자라고 부르며, 우리가 작성하는 프로그램에서도 명령행 인자를 받을 수 있다.
argc와 argv
main() 안에 void 대신 argc와 argv를 정의해보자.
#include <cs50.h>
#include <stdio.h>
int main(int argc, string argv[])
{
if (argc == 2)
{
printf("hello, %s\n", argv[1]);
}
else
{
printf("hello, world\n");
}
}
argc (argument count):
main함수가 받는 입력의 개수
argv (argument vector):
- 입력이 포함된 배열
- 명령행에서 실행하므로 입력은 문자열
argv[]는string배열
argv[0]:
- 항상 프로그램 이름
argv[1] 이후:
- 추가로 입력된 인자들
실행 예시
위 프로그램을 "arg.c"로 저장하고 컴파일한 후 실행해보자.
$ ./arg
# 출력: hello, world
명령행 인자가 프로그램 이름 하나뿐이므로 argc는 1이다. 조건 argc == 2가 거짓이므로 "hello, world"가 출력된다.
$ ./arg David
# 출력: hello, David
"David"가 추가로 입력되었으므로 argc는 2, argv[1]은 "David"가 된다. 조건이 참이므로 "hello, David"가 출력된다.
연습 문제
Q. 명령행 인자는 프로그램의 확장성에 어떤 도움이 될까? 구체적인 예시를 떠올려보자
명령행 인자는 프로그램에 다양한 옵션을 유연하게 제공하여 확장성을 높인다.
- 다양한 설정
- 사용자가 실행 시 설정 지정 가능
- 예:program -verbose(상세 로그 출력)
- 예:program --debug(디버그 모드) - 파일 처리
- 파일 이름이나 경로를 인자로 전달
- 예:image_processor -resize 800x600 image.jpg
- 예:converter input.txt output.csv - 사용자 정의 동작
- 같은 프로그램으로 다양한 작업 수행
- 예:backup_tool -backup /path/to/directory
- 예:backup_tool -restore /path/to/backup - 실제 활용 예시
-gcc -o output source.c: 컴파일러
-git commit -m "message": 버전 관리
-ls -la: 파일 목록 상세 보기
명령행 인자를 통해 프로그램은 더 유연하고 다양한 시나리오에 적용될 수 있다.
'TIL' 카테고리의 다른 글
| [CS50] 알고리즘 - 알고리즘 표기법 (0) | 2025.11.06 |
|---|---|
| [CS50] 알고리즘 - 검색 알고리즘 (0) | 2025.11.06 |
| [CS50] 배열 - 문자열의 활용 (0) | 2025.11.06 |
| [CS50] 배열 - 문자열과 배열 (0) | 2025.11.06 |
| [CS50] 배열 (0) | 2025.11.05 |
