|

C 언어 argc argv란 무엇일까: main 함수 인자를 명령줄에서 받는 방법

C 언어 argc argv란 무엇일까: main 함수 인자를 명령줄에서 받는 방법
argc와 argv는 터미널에서 프로그램을 실행할 때 함께 넘긴 문자열들을 main 함수로 전달합니다.

argc argv는 C 언어에서 `main` 함수가 명령줄 인자를 받을 때 쓰는 대표적인 매개변수 이름입니다. 터미널에서 프로그램 뒤에 값을 붙여 실행하면 그 값들이 문자열 목록으로 들어옵니다.

핵심은 argc는 개수, argv는 문자열 목록이라는 단순한 구조입니다. 이 글은 C main 함수와 command-line argument 설명을 기준으로 포인터 배열 감각까지 함께 정리합니다.

C 언어 argc argv 요약 카드
argc는 인자 개수, argv는 문자열 인자 목록으로 이해하면 됩니다.

argc argv를 먼저 한 줄로 정리하면

`argc`는 명령줄 인자의 개수이고, `argv`는 각 인자 문자열을 가리키는 목록입니다. 이름은 관례지만, C 입문 자료에서는 거의 항상 이 이름으로 설명합니다.

int main(int argc, char *argv[]) {
    printf("argc = %d\n", argc);

    for (int i = 0; i < argc; i++) {
        printf("argv[%d] = %s\n", i, argv[i]);
    }

    return 0;
}

터미널에서 넘긴 값은 문자열로 들어온다

예를 들어 `./memo todo.txt –verbose`처럼 실행하면, 프로그램은 실행 이름과 뒤에 붙은 값을 문자열 목록으로 받습니다.

./memo todo.txt --verbose

argv[0] = ./memo
argv[1] = todo.txt
argv[2] = --verbose

보통 `argv[0]`에는 실행한 프로그램 이름 또는 경로가 들어갑니다. 환경에 따라 표현은 달라질 수 있으므로, 핵심 인자는 대개 `argv[1]`부터 확인합니다.

argv는 문자열 배열처럼 읽으면 된다

`char *argv[]`는 문자열을 가리키는 포인터들의 배열처럼 이해할 수 있습니다. 각 `argv[i]`는 하나의 C 문자열을 가리킵니다.

if (argc >= 2) {
    printf("file name: %s\n", argv[1]);
}

입문 단계에서는 포인터 문법을 너무 깊게 파고들기보다, `argv[번호]`로 n번째 문자열을 꺼낸다고 먼저 잡는 편이 좋습니다.

인자 개수 확인을 먼저 해야 한다

명령줄 인자를 사용할 때 가장 흔한 실수는 `argv[1]`이 있다고 가정하는 것입니다. 사용자가 아무 인자도 넘기지 않으면 접근하면 안 되는 위치를 읽게 됩니다.

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("usage: app <file>\n");
        return 1;
    }

    printf("file: %s\n", argv[1]);
    return 0;
}

숫자 인자도 처음에는 문자열이다

터미널에서 `10`을 넘겨도 `argv` 안에서는 문자열 `”10″`입니다. 숫자로 계산하려면 변환이 필요합니다.

#include <stdlib.h>

int count = atoi(argv[1]);

실무적으로는 오류 처리를 더 세밀하게 할 수 있는 변환 함수를 검토해야 하지만, 입문 단계에서는 문자열로 들어온 뒤 변환한다는 흐름을 먼저 이해하면 됩니다.

언제 argc와 argv가 필요할까

  • 파일 이름을 터미널에서 받아 처리할 때
  • 간단한 옵션을 붙여 실행 방식을 바꾸고 싶을 때
  • 테스트할 값을 코드 수정 없이 바꿔 실행하고 싶을 때
  • CLI 도구의 가장 기본적인 입력 방식을 만들 때

실무 체크리스트

  1. argv를 읽기 전에 argc로 개수를 확인한다
  2. argv[0]은 사용자 입력값이 아니라 실행 이름으로 본다
  3. 숫자처럼 보여도 처음에는 문자열이라는 점을 기억한다
  4. 옵션이 많아지면 직접 파싱보다 전용 파서나 규칙을 검토한다
  5. 에러 메시지에는 사용 예시를 함께 보여준다

정리

C 언어의 argc와 argv는 명령줄에서 프로그램에 값을 넘기는 가장 기본적인 방법입니다. argc는 개수, argv는 문자열 목록으로 잡고, 실제 인자는 argv[1]부터 확인한다고 이해하면 훨씬 덜 헷갈립니다.

C 포인터와 문자열 흐름은 C 언어 포인터와 배열 차이, C 점 연산자 화살표 연산자 차이, C 언어 문자열과 문자 배열 차이와 함께 보면 좋습니다. 외부 기준은 cppreference – main function, cppreference – Array declaration, cppreference – Pointer를 확인했습니다.

함께보면 좋은 글