K & R 제 2 판을 읽는 동안 나는 프로그램이 항상 "main() {"으로 시작되었다는 것을 알아 차렸다. 나는 항상 main()이 그 앞에 int 또는 void를 가져야한다고 생각 해왔다. 그래서 그것은 "int main()"또는 "void main()"처럼 보일 것입니다. 무엇이 "main()"이고 그 차이점은 무엇입니까?main()이 main()이 아니거나 main()이 아닌 경우에도 c가 main()을 허용하는 이유는 무엇입니까?
답변
main()
가 지정되지 않은 경우 int
가 (당신이 그것을 지정해야합니다) int
에 반환 형식의 기본값으로 생략 된 기존 K & R 스타일입니다. 또한 빈 괄호는 K & R 스타일에 있는데 인자가 필요 없다는 것을 보여줍니다 .. C99에서 이것은 이제 void
이어야합니다. 빈 괄호는 함수가 원하는 형식이 아닌 모든 유형의 인수를 허용한다는 것을 의미합니다. 그래서 최종 결과는 다음과 같습니다 - 0이 아닌 반환 값이 비정상 종료를 표시
int main(void) { ... }
main()
이 int
를 반환해야합니다 .. 규칙은 끝에 return 0;
문이 프로그램이 성공적으로 실행 호출자에게 나타냅니다 도움이 될 것입니다 말했다.
질문에 대한 직접적인 대답은 잘못이 아니기 때문에 main() { ... }
이 작동한다는 것입니다. 컴파일러에서는 main
함수에 대해 반환 형식이 선언되지 않았으므로 기본값은 int
입니다. 빈 괄호는 main
이 모든 유형의 인수를 취한다는 것을 나타내며, 이는 잘못된 것도 아닙니다. 그러나, C99 스타일/표준을 준수
int main(void) { ... }
빈 괄호는 모든 유형의 인수 *를 의미하는 반면 * 'void'는 0 인수를 의미합니다. –
아, 그렇습니다. 변경됨. – adelbertc
@ Cicada : 이것은 사실이 아닙니다. 빈 괄호는 단순히 함수 프로토 타이핑을 피하기 때문에 잘못된 인수를 가진 호출은 제약 조건 위반이 아닙니다. 그러나 함수 정의에서 여전히 인수가없는 함수를 정의합니다. 함수를 호출 할 때 인수를 포함하면 제약 조건 위반이되지 않지만 (범위에 프로토 타입이 없으므로) 호출이 계속 실행되는 경우에도 정의되지 않은 동작을 호출합니다 일어났다. –
구문 시간의 대부분이 컴파일러에 따라 사용할 수 있습니다. 예를 들어, Visual C++를 사용할 때는 "void main"이라고 쓰지만 GCC를 사용할 때는 "int main()"이라고 쓰고 프로그램이 좋거나 나쁘면 0 또는 1을 반환해야합니다.
이전 버전의 c에서 지원되기 때문에.
main()
는
int main()
의
- 1. 애플릿에 NoSuchMethodError : main이 나타나는 이유는 무엇입니까?
- 2. main이 아닌 클래스에서 XAML 개체에 액세스하려면 어떻게합니까?
- 3. main이 패키지 내에있을 때 JamVM NoClassDefFoundError
- 4. Requirejs data-main이 baseUrl을 설정하지 않습니다.
- 5. gcc를 사용하여 진입 점이 main이 아닌 어셈블리를 컴파일하는 방법은 무엇입니까?
- 6. MAIN이 Factor on 명령 줄에서 실행되지 않습니다.
- 7. MAIN이 아닌 활동을 자체적으로 시작하기위한 알림 생성 가능?
- 8. 기본 이름이 main이 아니도록 SQLite 데이터베이스 이름을 지정하는 방법은 무엇입니까?
- 9. src/main이 src/test 위에 오도록 이븐 이클립스 플러그인이 아티팩트를 생성 할 수 있습니까?
- 10. Objective-C가 메서드 정의의 끝에서 세미콜론을 허용하는 이유는 무엇입니까?
- 11. 메인이 정적 인 이유는 무엇입니까?
- 12. C가 아닌 함수에서 (전역이 아닌) 변수를 정의하십시오
- 13. C가 while 루프의 중간에 걸리는 이유는 무엇입니까?
- 14. 출력에서 c가 증가하지 않는 이유는 무엇입니까?
- 15. C#에서 암시 적 void Main을 사용하는 이유는 무엇입니까?
- 16. AllowPartiallyTrustedCallers가 기본값이 아닌 이유는 무엇입니까?
- 17. Mingw의 mainCRTStartup 이전에 C가 작동합니까?
- 18. C가 아닌 영어 HTML 페이지 읽기 #
- 19. current_user가 아닌 이유는 무엇입니까?
- 20. SerialPort.BytesToRead가 0이 아닌 경우에도 항상 0으로 평가됩니다.
- 21. Java가 식별자에서 제어 문자를 허용하는 이유는 무엇입니까?
- 22. Objectivec에서 C main을 호출
- 23. MVar가`par`와 함께 작동하지 않는 이유는 무엇입니까?
- 24. 레이블에 고정 폭을 허용하는 이유는 무엇입니까?
- 25. JSON이 문자열 만 키로 허용하는 이유는 무엇입니까?
- 26. Task.Delay()가 무한 지연을 허용하는 이유는 무엇입니까?
- 27. Java가 크기 0의 배열을 허용하는 이유는 무엇입니까?
- 28. 뷰의 속성을 설정하려고하면 구조체가 아니거나 ... 멤버가 아닌 요청입니다.
- 29. 종료시 자살? stop java.util.Timer instance
- 30. C가 C99 이전에 부울 데이터 형식을 사용하지 않은 이유는 무엇입니까?
중복 가능성 [C 함수 구문 파라미터 유형 파라미터에서 선언 된 후에 (http://stackoverflow.com/questions/1585390/c-function-syntax- 동등 매개 변수 유형 - 선언 - 후 - 매개 변수 목록) – dirkgently
'void main()'단순히 잘못되었습니다. – asaelr