2015-01-13 1 views
1

Java에서 .java는 사람이 읽을 수있는 버전이며 .class가 컴파일된다는 것을 알고 있습니다.c - .class와 같습니다.

c에서 사람이 읽을 수있는 버전은 .c이지만 컴파일 된 클래스에 대해 별도의 파일 확장명이 있습니까?

+8

C가 Java처럼 작동하지 않습니다. C에는 그러한 파일이 없습니다. –

+1

일반적으로 (Windows에서) 컴파일러는 .exe 파일을 다른 fies와 .exe로 "바운드"합니다. 다른 파일 유형도 있지만 운영 체제마다 다른 표준이 있습니다. –

+0

Java는 사람이 읽을 수 있거나 C는 읽을 수있는 사람입니까? –

답변

5

C는 일반적으로 (바이트 코드가 아닌) 기본 플랫폼 용 파일을 생성합니다. 창문에서는 .exe.dll이 일반적입니다. 많은 플랫폼에서 중간에있는 "객체"파일은 .o으로 자주 보입니다. .h으로 끝나는 헤더 파일이 있습니다. Linux의 경우 일반적으로 .so이 표시되고 라이브러리 및 실행 파일에는 일반적으로 확장명이 없습니다. 그리고 Mac에서는 많은 것들에 달려 있습니다.

4

.o (또는 .obj) 오브젝트 파일.c 파일을 컴파일 및 Java의 .class 파일에 가장 가까운 것입니다 수 있습니다.

그들은 아카이브 (.a)에 함께 번들로 제공되거나 실제 프로그램이나 동적 라이브러리로 함께 링크 될 수 있습니다.

3

가장 가까운 아날로그 파일은 C 파일이 객체 파일 (보통 .o으로 끝남)로 컴파일된다는 것입니다. 오브젝트 파일은 심볼을 노출하고 실행 파일에 링크됩니다. 그러나 오브젝트 파일은 Java .class 파일과 동일하지 않습니다.

3

C 프로그래밍 언어로 작성된 프로그램은 일반적으로 Windows 실행 파일 (예 : Windows .exe)로 컴파일됩니다.

대부분의 C 컴파일러는 각 소스 코드 파일을 종종 확장자가 .o 인 개체 파일로 컴파일합니다. 링커는 하나 이상의 .o 파일을 가져 와서 기본 실행 파일을 만듭니다.

.o 파일은 Java .class 파일과 직접 비교할 수 없습니다. 예를 들어 파일을 실행할 수있는 것처럼 .o 파일을 실행할 수 없습니다.

+0

'final static void main()'을 선언하지 않으면 클래스 파일을 실행할 수 없습니다. – rupps

+2

@rupps 그것은'public static void main'입니다. 달리 클래스를 메인 프로그램으로 실행할 수는 없지만 런타임에'.class'를 동적으로 찾고 메소드를 실행할 수 있습니다. '.o' 파일로는 그 일을 할 수 없습니다. (하지만 .dll과 함께 할 수 있습니다.) – ajb

3

.class 파일은 Java에서 여러 가지 용도로 사용되기 때문에 몇 가지 다른 답변이 필요할 수 있습니다.

(1) Java 코드가 변수를 특정 유형으로 선언하거나 new을 사용하여 유형의 인스턴스를 만들 때 컴파일러는 유형에 사용할 수있는 메소드 및 다른 멤버를 알고 있어야합니다 다른 정보로. C에서는 이런 종류의 정보가 소스에 있어야합니다. 이는 .h 개의 파일을 포함하여 완료됩니다.

(2) Java .class 파일에는 실행되는 코드가 들어 있습니다. 프로그램이 실행될 때 .class의 코드가로드됩니다. 프로그램은 런타임까지 이름을 알 수없는 유형의 클래스 파일을 동적으로로드 할 수도 있습니다. C의 경우 코드는 오브젝트 파일 (Windows 또는 Linux 시스템의 경우 .o)에서 생성 된 후 모든 프로그램 코드 (Windows에서는 .exe, Linux에서는 확장자 없음)가 포함 된 단일 실행 파일로 링크됩니다. 코드는 프로그램 시작 후 동적으로 가져올 수도 있습니다. Windows에서 .dll 동적 라이브러리 파일의 코드를로드 할 수 있습니다.

(3) Java .class 파일의 정보는 프로그램에서 리플렉션을 사용할 때 사용됩니다. C에는 그러한 개념이 없습니다.

(4) 디버깅 할 때 디버거가 변수, 메소드 등에 대해 필요로하는 정보는 .class 개의 파일에 보관됩니다. C의 경우 일반적으로 심볼 테이블의 특수 형식 (예 : DWARF 또는 STABS)으로 오브젝트 파일에 보관됩니다. 보통 추가 정보를 저장하기 위해 C 컴파일러를 실행할 때 플래그를 추가해야합니다.