반응형

여기서 (알규먼트)= (argument) = (전달인자),  (파라미터)(parameter) = (매개변수)  의 차이점에 대해서 모르고 그냥 비슷비슷한 놈들 아니야? 라고 생각하는 사람들이 있을텐데 비슷한 놈들 맞다. 그냥 차이점 정도만 알고 있어도 되겠다.

 

#include <stdio.h>

void printSometing(char string[]){
    printf("%s", string);
}

int main(int argc, char *argv[]) {
    printSometing("Hello, World!\n");
    return 0;
}

알규먼트 (argument) (전달인자)
함수를 호출할때 전달 되는 실제 값, 프로그램 상의 코드로 봤을 때는 printSometing을 호출 할 때 넘겨준 문자열 즉

"Hello, World!\n" 가 (알규먼트) 전달인자로 사용되었다고 볼 수 있다.

 

파라미터 (parameter) (매개변수)
함수의 정의 부분에 나열되어 있는 변수, 여기선 printSometing함수를 선언할 때 사용한 문자열 변수 string이 파라미터 즉, 매개변수로 되겠다.

 

여기서 궁금했던 argcargv의 역할에 대해서 설명해보겠다. 지금처럼 프로그램을 마우스로 더블클릭하여 실행시키는 것은 보편화 되었다. 하지만 이것은 GUI환경에서만 가능한 일이고 예전 컴퓨터는 전부 CLI방식을 사용했다. 여기서 프로그램에게 인자를 넘겨주기 위하여 이 파라미터 2개가 사용되었다. 쉽게 메인함수에 argument로 값을 넘겨주고 싶을때 이것을 사용한다 라고 생각하자.

 

첫번째로 얘네들의 원형으로는,

argc는 "arguments count"의 약자로 main 함수에 전달된 argument의 개수를 의미한다.

argv는 "arguments vector"의 약자로 가변적인 개수의 문자열이다. 

 

아래 예제를 보자.

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("%d\n", argc);
    printf("%s\n", argv[0]);
    return 0;
}

실행 결과

결과를 보면 알 수 있듯이 argv의 첫번째 값은 무조건 실행 파일의 경로로 구성 되어 있다. 당연하게도 값이 들어 있기 때문에 argc의 값도 1이 되어 있다.

 

여기서 두번째 예제를 보자.

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("%d\n", argc);
    printf("%s\n", argv[0]);
    printf("%s\n", argv[1]);
    return 0;
}

실행결과

 

이렇게 main함수에 argument를 파일을 실행함과 동시에 넘겨줄 수 있다. 여기서 중요한점은 맨 첫번째 값은 실행파일의 절대경로로 되어 있기 때문에, 두번째 인덱스부터 접근하여 사용하도록 하자.

 

 

번외------------------------------

메인 함수의 바로 전

여기서 디버깅을 좀 해본 사람은 알겠지만 이 2개의 파라미터는 생략되어 있어도 프로그램을 실행하며 자동으로 생성되는 부분이기 때문에 프로그램을 디버깅 할 때 메인함수를 찾을 수 있는 방법 중 하나로 사용할 수 있다. 이렇게 메인 함수가 호출 되기 직전 argv와 argc를 사용하는 구문을 볼 수 있다.

반응형