본문 바로가기
c언어

c언어 main 함수의 인수에 대하여 알아보기

by 개발자 L 2023. 2. 10.
반응형

c언어 main 함수의 인수에 대하여 알아보기

네 안녕하세요, 이번 포스팅에서는 main 함수의 인수에 대하여 알아보도록 하겠습니다.

우리가 정말 많이 사용하는 함수가 바로 main 함수이죠?
지금까지 우리는 항상 한 가지 인수만 사용을 했는데,

사실 main 함수 내에 넣을 수 있는 인수가 여러 가지 있습니다.

그래서 이번 포스팅에서는 그러한 것들을 알아보려 합니다.

그럼 지금부터 시작하도록 하겠습니다.

 

1. main 함수에 넣을 수 있는 인수

우리는 지금까지 void 인수만 넣었습니다.

이건 다시 말하면 '빈 값'이기 때문에 매개 변수를 전달을 받지 못합니다.

그리고 그렇게 값이 비었단 것을 의미하고, 그냥 main 함수 옆에 붙이는 괄호에 아무것도 쓰지 않으면

자동으로 void가 되기 때문에 굳이 넣을 필요도 없었습니다.

하지만 우리가 사용자 정의 함수를 사용을 하면서부터 이것저것 많은 인수를 넣었었습니다.

main 역시 똑같이 넣습니다.

형태만 본다면 이렇습니다.

// 빈 값인 경우
int main(void) // void는 생략도 가능함.
{
    ...
}

// 매개 변수가 존재하는 경우
int main(int argc, char *argv[])
{
    ...
}

여기서 보면 제가 argc, argv를 적어두었죠?

이들의 뜻은 이렇습니다.

  • argc(argument count) : 명령어가 가지는 인수들의 개수
  • argv(argument value) : 명령어가 가지는 인수(값)들을 실제로 문자열 배열로 저장하는 곳

이렇습니다.

한 가지 예로, 우리가 'myprogram'이라고 하는 프로그램의 원본과 복사본의 이름을 받는다고 가정을 해봅시다.

그러면 보통 이런 식으로 쓰게 될 겁니다.

C:\c, c++ folder> myprogram src dst
반응형

 

이러고 엔터키를 누르게 될 것입니다.

이 명령의 뜻을 직역하자면, 'myprogram'이라는 파일 이름의 원본과 사본을 받겠다는 뜻이 됩니다.

그리고 여기서 이제 확인을 할 수 있습니다.

우리가 argc는 명령어가 가지는 인수들의 개수라고 했죠?
그러면 여기서 인수는 무엇일까요?

바로 myprogram, src, dst가 되고, 총 3개가 됩니다.

그리고 argv의 경우는 문자열 배열인데, 앞에 보면 에스터리스크가 붙는 게 보이죠?
바로 포인터 배열입니다.

그래서 이 각각의 인자를 포인터 배열로 받습니다.

그래서 argv 안에 있는 문자열들은 주소를 가지고 있는 포인터의 역할을 하게 되는 것이지요.

그래서 총 3개의 인자를 가지기 때문에 argv의 인덱스 주소 역시 0부터 2까지 총 3개가 되는 것입니다.

그럼 이를 토대로 한 번 간단한 코드를 작성해 보도록 하겠습니다.

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i = 0;

    for(int i = 0; i < argc; i++)
    {
        printf("명령어 행에서 %d번째 문자열 : %s\n", i, argv[i]);
    }

    return 0;
}

이렇게 작성을 해봤고, 각각 무엇을 입력하고, 실행을 어떤 경로에서 하느냐에 따라서 다르게 나올 수 있습니다.

저의 경우는 이렇게 나왔습니다.

명령어 행에서 0번째 문자열 : c:\c, c++ folder"tempCodeRunnerFile

저는 vscode를 이용하기에 '코드러너'라는 확장 프로그램을 사용 중이라서 이런 식으로 나왔습니다.

그리고 실행하는 방법은 크게 두 가지입니다.

첫 번째는 직접 도스창, 다시 말하면 cmd 창이나 터미널 창을 열어서 직접 실행 명령을 내리는 방법이 있고,

두 번째 방법은 저처럼 vscode를 쓰신다면 F1키를 누르고 검색창에 'launch.JSON'을 입력하여 파일을 열고서

거기에 인수를 넣어주시면 됩니다.

그리고 그냥 비주얼 스튜디오를 쓰신다면 [프로젝트] -> [main_arg.exe 속성] 경로로 들어가시면

'mainarg 속성 페이지'가 뜨는데, 거기서 '디버깅'을 누른 후, '명령 인수'란에 직접 명령 인수를 입력하시면 됩니다.

 

여기까지 main 함수의 인수에 대하여 알아보았는데요,

다음 포스팅에서는 지금까지 배웠던 것들을 토대로 여러 가지 문제들을 풀어보는 시간을 가져보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다~

반응형

댓글