[배열 ] #7. 명령형 인자

해피데빙·2022년 6월 26일
0

CS50

목록 보기
16/17

명령형 인자

make나 clang과 같은 프로그램을 실행할 때 컴파일하고자 하는 코드 외에도 컴파일 후 저장하고자 하는 파일명과 같이 추가적인 정보를 함께 줄 수도 있습니다.
이런 정보들을 명령행 인자 라고 부릅니다.
우리가 작성하는 프로그램에서도 명령행 인자를 받을 수 있도록 설계할 수 있습니다.

우리가 여태껏 많이 사용해온 main 함수를 보다 자세히 들여다볼 때가 왔습니다.

main도 그 형태를 보면 하나의 함수임을 알 수 있는데요, 이젠 더이상 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는 main 함수가 받게 될 입력의 개수입니다.

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

따라서 argv[]는 string 배열이 됩니다.

  • argv[0] : 기본적으로 프로그램의 이름으로 저장됩니다.

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

“arg.c” -> 컴파일 후 -> "./argc"로 실행

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

명령행 인자에 주어진 값이 프로그램 이름 하나밖에 없기 때문입니다. 그러므로 else에 걸려서 print.

하지만 “./argc David”로 실행해보면 “hello, David”라는 값이 출력됩니다.
: 첫번째 인자에 ./argc, 두번째 인자에 David

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

profile
노션 : https://garrulous-gander-3f2.notion.site/c488d337791c4c4cb6d93cb9fcc26f17

0개의 댓글