programing

메인으로 쓰는 게 어때요?

codeshow 2023. 9. 19. 21:29
반응형

메인으로 쓰는 게 어때요?

사람들이 사용합니다.void main() /*empty parens ()*/

는 를 .void main(void)

뭐가 다른지 알아요?

요즘 표준이 무엇인지 잘 모르겠지만, 전통적인 ANSIC에서는 빈 괄호를 사용하면 함수가 임의의 수의 인수를 취할 수 있음을 나타냅니다.선언하기void반면에 parameter는 함수가 0개의 인수만 사용한다는 것을 나타냅니다.이 경우(그리고 다른 많은 경우), 그것은 크게 중요하지 않습니다.

하지만 엄격하게 하고 싶다면, 아마도 다음과 같은 것을 정의하는 것이 최선일 것입니다.void매개 변수. 그럼요.main다로 정의될 .int main(int argc, const char* argv[])한 경우가 -하지만,합니다.

C99 표준부터:

5.1.2.2.1 프로그램 시작

프로그램 시작 시 호출되는 함수의 이름은 main입니다.구현에서 이 기능에 대한 프로토타입이 없음을 선언합니다.이는 매개변수 없이 int의 반환 유형으로 정의되어야 합니다.

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

또는 두 개의 매개 변수(여기서는 argc 및 argv로 referred하지만 선언된 함수의 로컬 이름이므로 임의의 이름을 사용할 수 있음):

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

또는 이와 동등한 방법, 또는 다른 구현 정의 방식.

매개 변수 없이 main을 정의할 때 argc와 argv가 스택에 계속 존재합니까?

main()의 이러한 프로토타입은 모두 비표준입니다.

이 질문에 대한 자세한 내용은 comp. lang.c FAQ: http://c-faq.com/decl/main.html 에서 확인할 수 있습니다.

편집: 표준에서 구현 정의 프로토타입을 허용함에 따라 "잘못된" 것을 "비표준"으로 변경했습니다.

차이는 없지만 보통 main은 int로 돌아옵니다.일부 컴파일러는 경고를 줄 것입니다 (적어도 GNU 컴파일러 - gcc).

$ cat x.c
void main(void){}

$ gcc x.c
x.c: In function `main':
x.c:1: warning: return type of 'main' is not `int'

메인의 프로토타입은 (표준에 따라) 다음과 같습니다.

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

main는 다른 함수와 마찬가지로 함수입니다.거의. 에 다른 .어쨌든 함수이기 때문에 다른 코드(스타트업 코드)로 부릅니다.통기:상)int main()올바른 것이지만 실제로 올바른 것은 작업 중인 플랫폼에 따라 달라집니다.와 같이, 어떠한 하지 못하는 될 수 것으로 이,고,에로))void main(void)정답입니다).

int main()일반적으로 시작 코드는 반환 값을 예상하고 두 개의 인수를 통과하므로 정확합니다.라고 말함으로써.int main(void)당신은 메인이 논쟁을 전혀 하지 않는다고 말하고 있습니다. 그것은 대부분의 경우 거짓입니다.와 함께()여러분은 논쟁이 있다고 말하지만(하나, 둘, 셋, 신경 쓰지 않는다), 논쟁에는 관심이 없으므로 논쟁이 무엇이고 어떤 유형인지 말하는 데 관심이 없습니다.

볼 수 " 수 에서 은 , "" ( "" )입니다.int main()d을 할 때int argc, char **argv을 제기합니다. 것으로 중 간 )수 (GCC한 gcc합니다. 시작 코드가 인수를 통과하지 못하고 반환 값이 없을 것으로 예상되는 환경 중 하나에 대해 교차 GCC 버전과 함께 테스트하십시오.)

편집하다

회의적인 사람들에게 친절하게 대하기 위해; 주된 기능이 불리는 환경에서, 두 가지 주장으로 다음과 같은 것들이 있습니다.

int func()
{
  return 0;
}

int func2(void)
{
  return 1;
}

int main(void)
{
  int a;
  a = func(a, a); /* A */
  a = func2(a);   /* B */
  return 0;
}

A는 오류가 없다고 말하고, B는 오류가 없다고 말합니다.too many arguments to function ‘func2’, 과 컴파일됩니다.gcc -std=c99 -pedantic 갈아입기.int main(void)안으로int main()아무런 차이도 없고 경고도 없습니다.

수 ), 에서는( )void main(void)괜찮아요. 이 경우 경고가 발생합니다.경고는 표준 때문이 아니라 사용 중인 환경에서 메인의 프로토타입이 일치하지 않기 때문입니다.표준에서는 메인에 대해 다른 "구성"을 허용하는 것 같습니다.

, 두 의, 의 arg 되는 "normal" (GNU/Linux OS) 하면,int main()는 preferent됨)라고 말하든 .int main(void)안 되든 간에int main()좀더 이해가 됩니다.)

편집하다

한가지 더, 항상 회의적인 사람을 위한 것입니다.된 바와 이이라고 에, B는는합니다입니다.int func2(void)전 논쟁을 통과하는 것이라고 생각합니다 다른 할 수 해 보겠습니다그러면 다른 코드와 마찬가지로 시작 코드를 컴파일하여 연결할 수 있다고 가정해 보겠습니다. 그것은에서,입니다,어와 같은 입니다.

retval = main(argc, argv);

을 .int main(void)(이두의 인수로 메인을 가 발생합니다 즉, (합니다) 에서.에 저희가.int main()아무 일도 일어나지 않고 코드가 올바르게 컴파일됩니다.

그렇게,int main()보다 우수한int main(void) 가지 에서)

편집하다

전화는 다음과 같습니다.

retval = main(_argc, _argv, environ);

많은 시스템에서, 그러나 이것은 이전의 연설을 바꾸지 않습니다.

최종 편집

(, 에서)가 하는 를할 때 이 있습니까?int argc, char **이 됩니다다).int main(void)는 , / 합니다인 시작 합니다.mainr를 들어 며은)됩니다를 때 호출됩니다.int main(int argc, char **argv)다라고 .main그 두으로가도일지라도)main그것 자체가 그것들을 사용하지 않습니까?)

언급URL : https://stackoverflow.com/questions/3156423/why-dont-we-use-void-in-main

반응형