- 명령행 인자: 사용자가 명령행에서 명령을 실행할 때 해당 명령과 함께 지정하는 인자를 의미함
- 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");
}
}
- 첫 번째 변수 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
지금까지 소소하게 느낀점
배열에 대해서 심층적으로 알아본 느낌이다. 한 번 봤다고 해서 내 것으로 하지는 못할 것 같지만
여러번 반복해서 보면 이해가 될 것 같다. 명령행인자는 이해하기 너무 어려웠는 데 여러번 보니까 조금은 이해가 될 것 같다..
string과 char의 관계도 신기하고, 긴 코드를 함수 하나로 짧게 구현한다는게 신기하다!!
'cs > CS50' 카테고리의 다른 글
4: 알고리즘-2(알고리즘 표기법) (0) | 2021.11.29 |
---|---|
4: 알고리즘-1(검색 알고리즘) (0) | 2021.11.29 |
3: 배열-5(문자열의 활용) (0) | 2021.11.28 |
3: 배열-4(문자열과 배열) (0) | 2021.11.27 |
3: 배열-3(메모리와 배열:전역변수) (0) | 2021.11.25 |