program tip

'main (int argc, char * argv [])'[duplicate] 관련

radiobox 2020. 9. 3. 08:14
반응형

'main (int argc, char * argv [])'[duplicate] 관련


중복 가능성 :
main ()에 대한 인수는 무엇입니까?
int argc, char * argv []는 무엇을 의미합니까?

모든 프로그램은 main(int argc, char *argv[])정의 로 시작 됩니다.

무슨 뜻인지 모르겠습니다. 우리가 프로그램에서 사용하지 않는다면 왜 우리가이 주장을 사용하는지 누군가가 설명 할 수 있다면 매우 기쁠 것입니다. 왜 안돼 : int main()?

의 요소의 프로그램 중 하나의 이름입니다 *argv[]argc의 인수의 수의 수입니다 *argv[]? 다른 인수는 무엇으로 전송 *argv[]됩니까? 어떻게 보내나요?


인수 argcargvof main는 프로그램에 인수를 보내는 방법으로 사용됩니다. 아마도 가장 친숙한 방법은 사용자가 cat file.을 입력 할 수있는 좋은 ol '터미널을 사용하는 것 입니다. 여기서 단어 cat는 파일을 가져와 표준 출력 ( stdout)으로 출력하는 프로그램입니다 .

프로그램의 인수의 수를 수신 argc하고있는 인자의 벡터 argv에서, 상기 상기 ARG ument C ount 두 (첫 번째 인수로서 프로그램 명 카운트)와 것 아규먼트 ument의 V를 포함 할 엑터 [ cat, file, ]. 마지막 요소가 널 포인터 인 동안.

일반적으로 다음과 같이 작성합니다.

int  // Specifies that type of variable the function returns.
     // main() must return an integer
main ( int argc, char **argv ) {
     // code
     return 0; // Indicates that everything went well.
}

프로그램에 인수가 필요하지 않은 경우 main다음과 같은 방식으로 함수 를 작성하는 것도 똑같이 유효합니다 .

int main() {
  // code
  return 0; // Zero indicates success, while any 
  // Non-Zero value indicates a failure/error
}

C 언어의 초기 버전에서는 이것이 암시 된 것처럼 int이전 에는 없었습니다 main. 오늘날 이것은 오류로 간주됩니다.

POSIX 호환 시스템 (및 Windows), 세 번째 매개 변수에 사용할 수있는 가능성이 존재하는 char **envp프로그램의 벡터 포함 ENV ironment 변수를 . main함수 의 인수 목록에 대한 추가 변형이 있지만 표준이 아니므로 여기서 자세히 설명하지 않겠습니다.

또한 변수 이름 지정은 관례 이며 실제 의미가 없습니다. 다른 사람을 혼동하지 않도록 항상이를 준수하는 것이 좋지만 다음 main과 같이 정의하는 것도 똑같이 유효합니다.

int main(int c, char **v, char **e) {
   // code
   return 0;
}

두 번째 질문에 대해 프로그램에 인수를 보내는 몇 가지 방법이 있습니다. 난 당신이보고 추천 exec*()기능의 가족 입니다 POSIX의 - 표준,하지만 아마 쉽게 단지 사용에 있지만, 사용 보통은 모든 시스템에서 작동하도록 보장되지 않는 눈살을 찌푸리게한다. 나는 그것을 직접 테스트하지 않았습니다. 어떤이없는 경우지만 , A * NIX 시스템에 설치 또는 다른 쉘이 실패합니다.system("command arg1 arg2")system()bashzshsystem()


예를 들어 프로그램이 호출 될 때 명령 줄에서 프로그램에 인수를 전달하기위한 것입니다.

$ gcc mysort.c -o mysort

$ mysort 2 8 9 1 4 5

위의 프로그램 mysort은 일부 명령 줄 매개 변수를 사용하여 실행됩니다. 내부 main( int argc, char * argv[])에서는 결과가

Argument Count, argc = 7 

7 개의 인수 (프로그램 계산)가 있기 때문에

Argument Vector, argv[] = { "mysort", "2", "8", "9", "1", "4", "5" };

다음은 완전한 예입니다.

$ cat mysort.c
#include <stdio.h>
int main( int argc, char * argv [] ) {
    printf( "argc = %d\n", argc );
    for( int i = 0; i < argc; ++i ) {
        printf( "argv[ %d ] = %s\n", i, argv[ i ] );
    }
}

$ gcc mysort.c -o mysort

$ ./mysort 2 8 9 1 4 5
argc = 7
argv[ 0 ] = ./mysort
argv[ 1 ] = 2
argv[ 2 ] = 8
argv[ 3 ] = 9
argv[ 4 ] = 1
argv[ 5 ] = 4
argv[ 6 ] = 5

[ char문자열 "2", "8"등은 일부 문자를 숫자로 변환 기능을 사용하여 숫자로 변환 할 수 있습니다 atol() ( 예 : (링크 )]).


argc(인수 수)와 argv(인수 벡터) 당신은 수와 응용 프로그램이 시작되었습니다 전달 된 인수의 값을 얻을 수 있습니다.

이렇게하면 -version애플리케이션이 다른 방식으로 작동하기 시작할 때 매개 변수 (예 :)를 사용할 수 있습니다 .

But you can also use int main(void) as a prototype in C.

There is a third (less known and nonstandard) prototype with a third argument which is envp. It contains environment variables.


Resources:


argc means the number of argument that are passed to the program. char* argv[] are the passed arguments. argv[0] is always the program name itself. I'm not a 100% sure, but I think int main() is valid in C/C++.


argc is the number of command line arguments given to the program at runtime, and argv is an array of arrays of characters (rather, an array of C-strings) containing these arguments. If you know you're not going to need the command line arguments, you can declare your main at taking a void argument, instead:

int main(void) {
    /* ... */ 
}

이것들은 main표준 따라 정의 된 유일한 두 가지 프로토 타입 이지만 일부 컴파일러는 반환 유형도 허용합니다 void. 자세한 내용은 Wikipedia에서 확인 하세요.


때 comp.lang.c 자주 묻는 질문 질문과 거래

"main ()의 올바른 선언은 무엇입니까?"
질문 11.12a .


argc명령 줄 인수의 수이며 명령 줄 인수를 argv나타내는 문자열 배열입니다.

이것은 프로그램에 전달 된 인수에 반응 할 수있는 옵션을 제공합니다. 아무것도 기대하지 않는다면 int main.


You can run your application with parameters such as app -something -somethingelse. int argc represents number of these parameters and char *argv[] is an array with actual parameters being passed into your application. This way you can work with them inside of your application.

참고URL : https://stackoverflow.com/questions/3898021/regarding-mainint-argc-char-argv

반응형