2012-01-09 31 views
7

Vì Objective-C về cơ bản là phần mở rộng của C, mã có được chuyển thành mã C thuần túy trước khi nó được biên dịch thành mã gốc không?Mỗi chương trình C Mục tiêu có được chuyển đổi thành mã C không?

Nếu có, chuyển đổi có xảy ra trên RAM hoặc tệp tạm chứa mã C trên đĩa được tạo bởi trình biên dịch được biên dịch bởi trình biên dịch C thành mã gốc không?

+0

bản sao có thể có của [Mục tiêu-C có biên dịch thành mã gốc hoặc mã byte không?] (Http://stackoverflow.com/questions/172614/does-objective-c-compile-to-native-code-or- byte-code) – Mark

+1

Không. Vì tôi biết rằng Không có máy ảo nào có mã JIT và Obj C biên dịch sang bytecode. Vui lòng đọc nhận xét của tôi để trả lời câu trả lời của larsmans. –

+0

Nhưng câu trả lời phải giống như họ phải cho bạn biết cách mã được biên dịch – Mark

Trả lời

8

Cú pháp mục tiêu-C là phần mở rộng của cú pháp C không có nghĩa là nó không thể có trình biên dịch riêng. C++ cũng giống như vậy - cú pháp của nó tương thích với C (phần lớn, dù sao) nhưng nó có bộ công cụ riêng. Các trình biên dịch cho C, C++ và Objective-C có thể tái sử dụng các phần của nhau để tiền xử lý, phân tích cú pháp và tạo mã, nhưng không cần phải chạy chúng tuần tự (ví dụ: Objective-C ==> C ==> Target code). Các trình biên dịch không còn đi qua ngôn ngữ lắp ráp có thể đọc được, hoặc (trường hợp này cũng đã xảy ra trong một thời gian rất dài).

4

Không, Mục tiêu-C được biên dịch trực tiếp thành bộ lắp ráp (giả sử GCC).

+0

nhưng phải có một số lý do mà các lớp trong Mục tiêu C được thực hiện dưới dạng cấu trúc C. –

+0

@AmoghTalpallikar: ý của bạn là gì? –

+0

Nếu bạn nhìn vào tài liệu của Apple, các đối tượng của các lớp trong Mục tiêu C về cơ bản là trỏ tới một số Cấu trúc C. cho ví dụ id là thực sự typedef cho objc_obj *. và cấu trúc đó có một con trỏ isa cho biết lớp thuộc về nó và thông tin khác về nó. Vì vậy, nếu mọi thứ được chuyển xuống mã C thuần túy, Liệu nó có được chuyển đổi thành mã C trung gian có thể nằm trong bộ nhớ nếu không có trên đĩa không? –

Các vấn đề liên quan