티스토리 뷰

알고리즘

argc & argv

이온시옥 2018. 7. 26. 23:09
반응형

argc, argv는 C언어의 main함수에서 사용되는 기본적인 인자이다. (알그씨, 알그브이?ㅋㅋㅋㅋ)

argument count & argument variable의 약자이다ㅋㅋ

대부분 C프로그래밍을 진행하면서 main 함수에서 인자 void를 사용했다. 처음에 C언어를 할때.,., main함수는 무조건 void인줄 알았지만 아니였다..ㅋㅋ

하지만 실제로 c언어로 작성이 된 리눅스 프로그램들은 대부분이 argc, argv 인자를 사용하여 사용자로부터 명령어를 받는다.

예를 들어, cd ~/Desktop을 리눅스 터미널에서 입력을 한다면 현재 디랙토리는 ~/Desktop으로 이동된다.

cd는 프로그램명이고 ~/Desktop은 cd프로그램에 들어가는 하나의 인자이다.


//코딩

//

//  main.c

//  program

//

//  Created by Eon on 7/26/18.

//  Copyright © 2018 Eonseok Yim. All rights reserved.

//

    

 #include <stdio.h>

    

 int main(int argc, const char * argv[]) {

    printf("argc == %d\n", argc);

    

    for (int i = 0; i<argc; i++) {

        printf("argv[%d] == %s\n", i, argv[i]);

    }

    

    return 0;

 }



main 함수에 파라미터로 argc, argv를 사용할 수 있다.

C언어는 리눅스에서 프로그램에 많이 사용되고 있다.

프로그램에 인자를 주기위해서 사용하는 방법으로 argc, argv 인자를 사용한다.


//실행

Eons-MacBook-Pro:Debug eon$ ls

program

Eons-MacBook-Pro:Debug eon$ ./program

argc == 1

argv[0] == ./program

Eons-MacBook-Pro:Debug eon$ ./program aaa bbb ccc ddd

argc == 5

argv[0] == ./program

argv[1] == aaa

argv[2] == bbb

argv[3] == ccc

argv[4] == ddd

Eons-MacBook-Pro:Debug eon$ 


터미널 bash창에서 program이라는 이름으로 위의 C언어를 컴파일하였다.


$ ls

ls를 사용하여 현재 디렉토리에 컴파일이 된 program이 존재하는 것을 알 수 있다. 


$ ./program

즉, argc는 1이고 argv인자로는 하나의 포인터로 "./program"이 출력이 되었다.

기본적으로 무조건 argc는 1 이상이고 argv의 첫번째 포인터는 프로그램의 자기자신이 불린 string이 출력이 된다.


$ ./program aaa bbb ccc ddd

space를 간격으로 인자를 구분한다.

프로그래밍을 진행할 때 뒤에 어떤 인자가 오는지에 따라서 코딩이 가능하다.
프로그램을 실행하면서 인자로 "./program", "aaa", "bbb", "ccc", "ddd" 5개의 인자가 입력으로 들어오는 것이다.

위에 C언어로 작성된 코드와 실행되어서 출력된 로그를 비교해 보면 이해하기가 쉽다.
즉, 터미널과 프로그램과 상호작용이 이루어지는 것을 알 수 있다.

//결론

터미널, bash창과 같은 OS자체에서 main함수에게 인자를 쉽게 입력할 수 있는 방법으로 사용된다.
main함수에서 사용하는 인자는 2개 argc, argv
argc는 length를 의미하며
argv는 포인터 배열로써 bash에서 실행한 프로그램의 string을 space간격으로 포인팅

실제, 리눅스 bash에서 사용하는 다양한 프로그램들은 이러한 argc, argv를 사용하여 개발이 됨.
인자로 넘겨주기가 매우 편리함.


반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함