logo

C의 명령줄 인수

C의 가장 중요한 기능은 main() 함수입니다. 이는 대부분 반환 유형이 int이고 매개변수 없이 정의됩니다.

int main() { ... }>

C에서 명령줄 인수를 제공할 수도 있습니다. 명령줄 인수는 운영 체제의 명령줄 셸에서 프로그램 이름 뒤에 제공되는 값입니다. 명령줄 인수는 C 프로그램의 main() 함수에 의해 처리됩니다.



명령줄 인수를 전달하기 위해 일반적으로 두 개의 인수로 main()을 정의합니다. 첫 번째 인수는 명령줄 인수 수 두 번째는 명령줄 인수 목록입니다.

CSS 불투명도 전환

통사론

int main(int argc, char *argv[]) { /* ... */ } or int main(int argc, char **argv) { /* ... */ }>

여기,

    argc(ARGument Count)는 프로그램 이름을 포함하여 사용자가 전달한 명령줄 인수의 개수를 저장하는 정수 변수입니다. 따라서 프로그램에 값을 전달하면 argc의 값은 2(인수 하나와 프로그램 이름 하나)가 됩니다.
  • argc의 값은 음수가 아니어야 합니다.
  • argv(ARGument Vector)는 모든 인수를 나열하는 문자 포인터 배열입니다.
  • argc가 0보다 큰 경우 argv[0]부터 argv[argc-1]까지의 배열 요소에는 문자열에 대한 포인터가 포함됩니다.
  • argv[0]은 프로그램의 이름입니다. 그 이후에는 argv[argc-1]까지 모든 요소가 명령줄 인수입니다.

더 나은 이해를 위해 Linux 시스템에서 이 코드를 실행하세요.



아래 예에서는 명령줄 인수 인쇄를 보여줍니다.






// C program named mainreturn.c to demonstrate the working> // of command line arguement> #include> // defining main with arguments> int> main(>int> argc,>char>* argv[])> {> >printf>(>'You have entered %d arguments: '>, argc);> >for> (>int> i = 0; i printf('%s ', argv[i]); } return 0; }>

>

>

산출

You have entered 4 arguments: ./main geeks for geeks>

터미널 입력용

$ g++ mainreturn.cpp -o main $ ./main geeks for geeks>

메모: 다른 플랫폼 종속 형식도 C 표준에서 허용됩니다. 예를 들어 Unix(POSIX.1은 아님) 및 Microsoft Visual C++에는 프로그램 환경을 제공하는 세 번째 인수가 있으며, 그렇지 않으면 stdlib.h의 getenv를 통해 액세스할 수 있습니다. 자세한 내용은 환경 변수를 인쇄하는 C 프로그램을 참조하세요.

C의 명령줄 인수 속성

  1. main() 함수에 전달됩니다.
  2. 이는 프로그램이 호출될 때 프로그램에 제공되는 매개변수/인수입니다.
  3. 코드 내부의 값을 하드 코딩하는 대신 외부에서 프로그램을 제어하는 ​​데 사용됩니다.
  4. argv[argc]는 NULL 포인터입니다.
  5. argv[0]에는 프로그램 이름이 들어 있습니다.
  6. argv[1]은 첫 번째 명령줄 인수를 가리키고 argv[argc-1]은 마지막 인수를 가리킵니다.

메모: 공백으로 구분된 모든 명령줄 인수를 전달하지만 인수 자체에 공백이 있는 경우 큰따옴표나 작은따옴표 안에 넣어 이러한 인수를 전달할 수 있습니다.

아래 프로그램은 명령줄 인수의 작동을 보여줍니다.




// C program to illustrate> // command line arguments> #include> int> main(>int> argc,>char>* argv[])> {> >printf>(>'Program name is: %s'>, argv[0]);> >if> (argc == 1)> >printf>(>' No Extra Command Line Argument Passed '> >'Other Than Program Name'>);> >if> (argc>= 2) {> >printf>(>' Number Of Arguments Passed: %d'>, argc);> >printf>(>' ----Following Are The Command Line '> >'Arguments Passed----'>);> >for> (>int> i = 0; i printf(' argv[%d]: %s', i, argv[i]); } return 0; }>

>

>

다양한 시나리오의 출력:

1. 논쟁 없이: 위 코드를 컴파일하고 인수를 전달하지 않고 실행하면 다음과 같은 출력이 생성됩니다.

터미널 입력

$ ./a.out>

산출

Program Name Is: ./a.out No Extra Command Line Argument Passed Other Than Program Name>

2. 세 가지 주장: 위 코드를 세 개의 인수로 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.

터미널 입력

windows.open 자바스크립트
$ ./a.out First Second Third>

산출

Program Name Is: ./a.out Number Of Arguments Passed: 4 ----Following Are The Command Line Arguments Passed---- argv[0]: ./a.out argv[1]: First argv[2]: Second argv[3]: Third>

3. 단일 주장: 위 코드를 공백으로 구분하고 큰따옴표 안에 포함된 단일 인수를 사용하여 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.

터미널 입력

$ ./a.out 'First Second Third'>

산출

Program Name Is: ./a.out Number Of Arguments Passed: 2 ----Following Are The Command Line Arguments Passed---- argv[0]: ./a.out argv[1]: First Second Third>

4. 공백으로 구분된 따옴표 안의 단일 인수: 위 코드를 공백으로 구분하고 작은따옴표 안에 단일 인수를 사용하여 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.

터미널 입력

$ ./a.out 'First Second Third'>

산출

Program Name Is: ./a.out Number Of Arguments Passed: 2 ----Following Are The Command Line Arguments Passed---- argv[0]: ./a.out argv[1]: First Second Third>