[CS50] 명령행 인자

TIL

명령행 인자란

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. 명령행 인자는 프로그램의 확장성에 어떤 도움이 될까? 구체적인 예시를 떠올려보자
명령행 인자는 프로그램에 다양한 옵션을 유연하게 제공하여 확장성을 높인다.

  1. 다양한 설정
    - 사용자가 실행 시 설정 지정 가능
    - 예: program -verbose (상세 로그 출력)
    - 예: program --debug (디버그 모드)
  2. 파일 처리
    - 파일 이름이나 경로를 인자로 전달
    - 예: image_processor -resize 800x600 image.jpg
    - 예: converter input.txt output.csv
  3. 사용자 정의 동작
    - 같은 프로그램으로 다양한 작업 수행
    - 예: backup_tool -backup /path/to/directory
    - 예: backup_tool -restore /path/to/backup
  4. 실제 활용 예시
    - 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
'TIL' 카테고리의 다른 글
  • [CS50] 알고리즘 - 알고리즘 표기법
  • [CS50] 알고리즘 - 검색 알고리즘
  • [CS50] 배열 - 문자열의 활용
  • [CS50] 배열 - 문자열과 배열
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Next.js
    제네릭
    App Router
    배열
    typescript
    Spa
    generic
    react
    앱 라우터
    algorithm
    CS
    ai 감성 일기장
    페이지 라우터
    알고리즘
    Pages Router
    C
    함수 타입
    문자열
    cs50
    트러블 슈팅
    자료구조
    memory
    emotion diary
    바닐라 자바스크립트
    javascript
    Trouble Shooting
    useState
    인터페이스
    타입 좁히기
    클래스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[CS50] 명령행 인자
상단으로

티스토리툴바