main 함수에 argc, argv 라는 매개변수를 전달한다. argc는 argument count로 int형으로 정의한다. 인수들의 개수이다. argv는 argument vector의 줄임말이며 char형 더블포인터이다. 인수들 자체를 나태니는 문자열들의 배열이다.
먼저, 다음과 같이 실행을 했다고 생각해 봅시다.
초록색으로 칠한 것은 실행 파일 명입니다. work를 실행을 한 것입니다. 그리고 보라색으로 칠한 것은 옵션을 의미하는데요. 보라색의 갯수는 5개임을 알 수 있습니다. argc는, 이 보라색의 갯수 + 1과 같습니다. 실행 파일명, 명령행 등은 space로 구분이 됩니다. 그러면, 아래 명령어로 work를 수행했을 때, argc의 값은 어떻게 될까요?
./work는 실행파일 명이고, -ail과 1234가 space를 기준으로 분리되어 있어요. 따라서, argc의 값은 2입니다. 그러면, argv는 무엇일까요? 잘 생각을 해 보면, 우리는 "./work"랑 "-ail"과 "1234"를 저장할 뭔가가 있어야 할 겁니다.
이것을 그림으로 그려 봅시다.
문자열들이 여러개 있습니다. 이것들을 어떻게 관리하면 좋을까요? 배열로 만들면 좋지 않을까요? 그러면, 문자열들을 모아놓은 배열이 무엇인가요? string array라고 하면 될 겁니다.
그런데 char형 포인터로도 문자열을 가리킬 수 있어요. 이것들을 배열에 넣어놓아도 되겠네요. 그러면 각각의 요소는 어떤 값을 가지고 있을까요? 문자열의 시작 주소만 들고 있으면 될 겁니다.
그러면 그것들을 모아놓은 배열을 뭐라고 할까요? char를 가리키는 포인터 배열이라고 보면 됩니다. 아니면, char *형을 가리키는 포인터로도, char *를 모아놓은 array를 가리킬 수 있어요.
그러면, argv[0]과 argv[1], argv[2]는 무엇을 가리킬까요? 각각 "work", "-ail", "1234"를 가리킵니다. argv[x]는 x번째 옵션 문자열을 가리키게 됩니다.
실행 파일의 이름을 work라고 해 봅시다. 그리고 추가 인자로 3 4 73이 들어왔다고 해 봅시다.
그러면 argc는 4입니다. 옵션 갯수는 3이고 여기에 1을 더한 값이 4이기 때문입니다. argv[0]은 "work"를, argv[1]은 "3", argv[2]는 "4", argv[3]은 "73"을 가리킬 겁니다.
이 프로그램은 무엇을 할까요? 일단 argc의 값은 4이니까, argv[1]부터 argv[3]까지 돌면서 뭔가를 할 겁니다. atoi(str)는, 문자열 str을 int형 수로 변환시켜주는 프로그램입니다. atoi("4")는 4, atoi("73")은 73이 될 겁니다. 즉 옵션을 "7", "3"을 줬다면 10을 출력하고 끝날 겁니다. 당연하게도 아무 옵션이 없으면 argc가 0이니까 0을 출력할 겁니다. test를 실행해 봅시다.
옵션에 3, 4, 73을 주었습니다. 이 셋을 더하면 80이기 때문에, 80이 출력됩니다.
'IT > Linux' 카테고리의 다른 글
[Linux] gcc versions 바꾸기 (0) | 2021.11.16 |
---|---|
[Linux] gcc 로 C++ 컴파일 하기 (0) | 2021.07.21 |
[Linux] mv (0) | 2021.03.23 |
[Linux] Cmake 업데이트 (0) | 2021.03.23 |
[Linux] GPU 정보 확인 (0) | 2021.01.26 |