Java에서 .java는 사람이 읽을 수있는 버전이며 .class가 컴파일된다는 것을 알고 있습니다.c - .class와 같습니다.
c에서 사람이 읽을 수있는 버전은 .c이지만 컴파일 된 클래스에 대해 별도의 파일 확장명이 있습니까?
Java에서 .java는 사람이 읽을 수있는 버전이며 .class가 컴파일된다는 것을 알고 있습니다.c - .class와 같습니다.
c에서 사람이 읽을 수있는 버전은 .c이지만 컴파일 된 클래스에 대해 별도의 파일 확장명이 있습니까?
C는 일반적으로 (바이트 코드가 아닌) 기본 플랫폼 용 파일을 생성합니다. 창문에서는 .exe
과 .dll
이 일반적입니다. 많은 플랫폼에서 중간에있는 "객체"파일은 .o
으로 자주 보입니다. .h
으로 끝나는 헤더 파일이 있습니다. Linux의 경우 일반적으로 .so
이 표시되고 라이브러리 및 실행 파일에는 일반적으로 확장명이 없습니다. 그리고 Mac에서는 많은 것들에 달려 있습니다.
.o
(또는 .obj
) 오브젝트 파일는 .c
파일을 컴파일 및 Java의 .class
파일에 가장 가까운 것입니다 수 있습니다.
그들은 아카이브 (.a
)에 함께 번들로 제공되거나 실제 프로그램이나 동적 라이브러리로 함께 링크 될 수 있습니다.
가장 가까운 아날로그 파일은 C 파일이 객체 파일 (보통 .o
으로 끝남)로 컴파일된다는 것입니다. 오브젝트 파일은 심볼을 노출하고 실행 파일에 링크됩니다. 그러나 오브젝트 파일은 Java .class
파일과 동일하지 않습니다.
C 프로그래밍 언어로 작성된 프로그램은 일반적으로 Windows 실행 파일 (예 : Windows .exe
)로 컴파일됩니다.
대부분의 C 컴파일러는 각 소스 코드 파일을 종종 확장자가 .o
인 개체 파일로 컴파일합니다. 링커는 하나 이상의 .o
파일을 가져 와서 기본 실행 파일을 만듭니다.
.o
파일은 Java .class
파일과 직접 비교할 수 없습니다. 예를 들어 파일을 실행할 수있는 것처럼 .o
파일을 실행할 수 없습니다.
.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 컴파일러를 실행할 때 플래그를 추가해야합니다.
C가 Java처럼 작동하지 않습니다. C에는 그러한 파일이 없습니다. –
일반적으로 (Windows에서) 컴파일러는 .exe 파일을 다른 fies와 .exe로 "바운드"합니다. 다른 파일 유형도 있지만 운영 체제마다 다른 표준이 있습니다. –
Java는 사람이 읽을 수 있거나 C는 읽을 수있는 사람입니까? –