[배열] 명령행 인자

woodstock·2024년 2월 27일
post-thumbnail

makeclang과 같은 프로그램을 실행할 때 컴파일하고자 하는 코드 외에도 컴파일 후 저장하고자 하는 파일명과 같이 추가적인 정보를 함께 줄 수도 있다.

이런 정보들을 명령행 인자 라고 부르며, 우리가 작성하는 프로그램에서도 명령행 인자를 받을 수 있도록 설계할 수 있다.

이전에 해왔던 것처럼 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");
    }
}

여기서 첫번째 변수 argcmain 함수가 받게 될 입력의 개수이다.

그리고 argv[]그 입력이 포함되어 있는 배열이다. 프로그램을 명령행에서 실행하므로, 입력은 문자열로 주어진다.

따라서, argv[]string배열이 된다.

argv[0]는 기본적으로 프로그램의 이름으로 저장된다.

만약 하나의 입력이 더 주어진다면 argv[1]에 저장될 것이다.

예를 들어 위 프로그램을 “arg.c”라는 이름으로 저장하고 컴파일 한 후 “./argc”로 실행해보면 “hello, world”라는 값이 출력된다.

명령행 인자에 주어진 값이 프로그램 이름 하나밖에 없기 때문이다.

하지만 “./argc David”로 실행해보면 “hello, David”라는 값이 출력된다.

명령행 인자에 David라는 값이 추가로 입력되었고, 따라서 argc 는 2, argv[1]은 “David”가 되기 때문이다.

생각해보기

명령행 인자는 프로그램의 확장성에 어떤 도움이 될까? 구체적인 예시를 떠올려보자.

정답

명령행 인자는 프로그램에 다양한 옵션을 쉽고 유연하게 제공함으로써 확장성에 크게 기여한다.

  1. 다양한 설정

    • 사용자가 프로그램 실행시 다양한 설정을 지정할 수 있다.
    • program -verbose명령은 로깅을 자세히 출력하도록 할 수 있다.
  2. 파일 처리

    • 파일 이름이나 경로를 인자로 전달하여 프로그램이 다양한 파일을 처리할 수 있게 한다.
    • image_processor -resize 800x600 image.jpg
  3. 사용자 정의 동작

    • 사용자가 특정한 동작을 선택할 수 있게 하여 같은 프로그램으로 다양한 작업을 수행할 수 있다.
    • backup_tool -backup /path/to/directory 또는 backup_tool -restore /path/to/backup

이처럼 명령행 인자를 통해 프로그램은 더 유연하고 다양한 시나리오에 적용될 수 있으며, 사용자 맞춤형 기능을 제공할 수 있다.

profile
해내는 사람

0개의 댓글