2010-12-10 5 views
4

C 메인 기능과 자바 메인 기능의 차이점은 무엇입니까? C 메인 대 자바 메인

public static void main(String [] args) 

어떻게 이러한 주요 기능은 각각의 언어 생성과 관련된 각각의 장점 또는 결과는 무엇을합니까

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

?

+2

그들 중 어떤 사람 (또는 둘 다)이 이해하지 못합니까? –

+0

이해가 안되는 것은 아니 었습니다. "이 주요 기능은 각 언어 작성과 어떻게 관련이 있으며 각각의 이점이나 결과는 무엇입니까?" – jarryd

답변

7

C (주 기능)의 진입 점은 실행 가능 타겟이 지정 될 때 실행 파일이 실행될 때 실행되도록 C++ 컴파일러 툴 체인의 링커에서 사용됩니다. 그렇지 않으면 함수가 무시됩니다. 이 진입 점은 실행 가능 사양의 일부이며 매우 고정적입니다. 그것은 특정의 구체적인 메모리 주소에있는 기계 코드에 의존합니다. 이를 상상해 보면 args 배열 포인터와 args 카운트가 스택에 실행 파일이 운영 체제에 의해 실행될 때 설정된 메모리에 저장되고 그 다음 기계 코드가 실행됩니다. 또한 C 함수에는 실패 또는 성공을 셸 (일반적으로 EXIT_SUCCESS (일반적으로 0) 또는 EXIT_FAILURE)에 반환하는 데 사용되는 int 반환 형식이 있습니다.

Java의 진입 점 (main 메소드)은 Java 자체가 해석 된 JIT 언어이므로 동적입니다. 클래스 경로에있을 때이 메소드가있는 클래스에 의존하고 'java'명령이 실행될 때 지정됩니다. 메인 메소드가 바이트 코드에있는 곳을 찾은 다음 바이트 코드 인터프리터를 통해 내용을 실행하는 데 관련된 약간의 처리가 있습니다. args 배열은 메서드 본문에서 사용할 스택으로 이동하지만 배열 객체이기 때문에 그 이상의 설정이 있습니다. JNI를 통해 킥 스타트 한 후에 변환합니다. Java는 main 메소드에서 반환 유형이 없지만 검사되지 않은 예외가 throw되어 (아마도) 실패를 나타낼 수 있습니다.

+2

+1 Java 바이너리 (클래스 파일, 아마도 jar 파일)의 모음이 여러 개의'main' 메소드를 포함 할 수 있다는 점과 JavaVM에 대한 인수만으로 올바른 방법을 찾지 못한다는 사실은 잘 알려져 있지 않습니다. 시작하기. C/C++ 프로그램은 하나의 정의 된 진입 점이있는 컴파일 된 실행 파일이고 각 대체 진입 점은 새로운 컴파일 된 실행 파일이 필요합니다. –

11

그들은 똑같은 일을합니다. 둘 다 프로그램의 진입 점이됩니다.

서명의 차이점은 Java가 길이를 '알고'있는 배열을 지원하고 C가 지원하지 않기 때문입니다. 그래서 전달 된 인수의 수인 argc이 필요합니다.

C에서는 정수 값과 함께 return 키워드를 사용하여 성공 또는 실패 코드를 셸로 반환합니다. Java에서는 리턴 코드를 사용하여 System.Exit (코드)을 호출하여 수행합니다. 같은 일을하는 두 가지 다른 방법.

이 남자는 주제에 quite the write-up을 가지고 있습니다!