programing

C에서 주(공)와 주()의 차이

newsource 2023. 10. 22. 20:05

C에서 주(공)와 주()의 차이

누가 나에게 그들 사이의 차이점을 말해줄 수 있습니까?int main()그리고.int main(void)? 두 가지 모두 작동하는 이유 및 기본 인수는 무엇입니까?int main()?

보통 상황에서는 차이가 없습니다.인수가 전혀 없으므로 '기본 인수에서 main()'이 아닙니다.

이상한 상황은 이렇습니다.메인에 직접 전화를 걸면,()당신이 원하는 어떤 파라미터라도 전달할 수 있게 해 줄 겁니다(void)아무 것도 넘기지 못하게 할 겁니다 그러나 99.가 되지 하기 위해 됩니다.그러나 99.99999999%의 경우에는 이 중 어떤 것도 중요하지 않습니다. 이 경우는 프로그램을 시작하기 위해 런타임에 의해 호출됩니다.런타임은 사용자가 글을 쓰는지 알 수도 상관도 없습니다.()아니면(void).

표준을 코드화하면int main(int argc, char **argv)명령행 매개변수를 입력할 수 있습니다.

main()는 임의의 수의 파라미터를 사용하여 메인을 호출할 수 있습니다.main(void)매개 변수 없이 메인을 호출합니다.그래서:

main(foo, bar);

괜찮아요main()함께는 아니지만main(void)- 컴파일러가 오류를 발생시킵니다.

이제 프로그램의 시작 지점에 대해 구체적으로 묻는다면 차이가 없습니다. 어느 경우든 프로그램에 대한 인수(argc, argv, envp)를 사용할 수 없습니다.

실용적인 관점에서 보면, 실질적인 차이는 없습니다.와 함께int main(void), 당신은 분명히 다음과 같이 말하고 있습니다.main매개 변수를 사용하지 않으므로 매개 변수를 사용하여 호출할 수 없습니다.와 함께int main(), 당신은 그들이 그들을 공격할 수 있는main몇 가지 파라미터를 사용합니다.

그러나 코드 골프나 의도적으로 난독화된 코드와 같은 이상한 상황을 제외하고는 당신은 호출하지 않습니다.main어쨌든 -- 프로그램의 시작점이므로 시작 코드에 의해 자동으로 호출됩니다.시작 코드가 명령줄 인수를 전달하므로 선택한 내용이 호출 방식을 변경하지 않고 전달되는 매개 변수를 사용하든 무시하든 간에 변경되지 않습니다.

표준에서는 다음과 같이 정의할 수 있습니다.main 또는 (1.2.2.1/1):음(§5.1.2.1/1):

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

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

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

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

또는 이에 준하는 것;

지정된 태그 밖에 있지만 C++에서는 상황이 조금씩 다릅니다.C에서 함수 선언은 다음과 같습니다.

int f();

지정합니다.f를 반환하는 함수입니다.int, 그러나 매개 변수의 수나 유형에 대한 정보는 제공하지 않습니다.f(이것은 주로 이전 코드와의 호환성을 위해 포함된 것이지만, 한 때는 이것이 C에서 함수를 선언할 수 있는 유일한 방법이었다).C++에서는 동일한 선언이 명시적으로 선언됩니다.f매개변수를 사용하지 않는 함수로서, 호출을 시도합니다.f하나 이상의 매개 변수를 사용하면 이 함수를 호출할 수 없습니다(적절한 오버로드가 발견되지 않으면 다른 오버로드를 호출하거나 오류를 생성해야 함).

언급URL : https://stackoverflow.com/questions/3711048/difference-between-mainvoid-and-main-in-c