본문 바로가기
cs/CS50

3: 배열-6(명령행 인자:command-line arguments)

by 이쟝 2021. 11. 28.
  • 명령행 인자: 사용자가 명령행에서 명령을 실행할 때 해당 명령과 함께 지정하는 인자를 의미함
  • Make나 clang 같은 프로그램 실행 시, 컴파일하려는 코드 외에도 컴파일 후 저장하려는 파일명 등 추가적인 정보를 줄 수 있음(ex. clang -o 같은 것)
  • 명령행 인자를 사용하면 프로그램 실행 후 변수에 값을 저장하는 게 아니라, 프로그램 실행과 동시에 인자가 활용됨
  • 명령행 인자는 자동으로 프로그램의 main 함수에 전달되기 때문에 프로그램 내부의 코드를 사용하지 않고도 데이터를 입력할 수 있음

main도 하나의 함수이다. main() 안에 void라는 인자를 입력하는 대신 int argc, string 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");
    }
}

 

파일이름은 argv.c&amp;nbsp;

  • 첫 번째 변수 int argc는 main 함수가 받게 될 입력의 개수
  • 두 번째 변수 string argv[] 는 string 배열이 됨(입력이 포함되어 있는 배열 프로그램을 명령행에서 실행하기 때문에 입력은 문자열로 주어짐)
  • argv[0] 은  기본적으로 프로그램의 이름으로 저장되고, 하나의 입력이 더 주어진다면 argv[1] 에 저장됨
  • ex) 위 프로그램을 "argv.c"라는 이름으로 저장하고 컴파일한 후 "./argv"로 실행하면 "hello world"라는 값이 출력되는 이유는 명령행 인자에 주어진 값이 프로그램 이름 하나밖에 없기 때문(argc == 1이어서)
  • 하지만 "./argv hello"로 실행하게 되면 "hello, hello"라는 값이 출력됨!
  • C 프로그램을 실행할 때 프로그램 뒤에 단어를 입력하게 되면 그 단어들은 argv 배열에 들어가게 되고, argc에는 단어의 개수가 저장됨

→ "./argv hello"는 명령행 인자에 hello라는 값이 추가로 입력되었고, 따라서 int argc는 2개, stirng argv[0] 은 argv.c, string argv [1]은 "hello"가 됨 (argc == 2어서 첫 번째 printf가 출력 가능하고 거기서 argv[1] 은 hello이기 때문에 hello가 출력됨!)

 

→ 이제 main() 함수 뒤에 두 가지 선택지가 생김(명령행 인자를 받거나 전과 같이 void를 입력하거나(void를 입력한다는 뜻은 명령행 인자가 필요 없다고 하는 것임)

 

https://www.boostcourse.org/cs112/joinLectures/41307

 

모두를 위한 컴퓨터 과학 (CS50 2019)

부스트코스 무료 강의

www.boostcourse.org

 

지금까지 소소하게 느낀점

배열에 대해서 심층적으로 알아본 느낌이다. 한 번 봤다고 해서 내 것으로 하지는 못할 것 같지만

여러번 반복해서 보면 이해가 될 것 같다. 명령행인자는 이해하기 너무 어려웠는 데 여러번 보니까 조금은 이해가 될 것 같다..

string과 char의 관계도 신기하고, 긴 코드를 함수 하나로 짧게 구현한다는게 신기하다!!