Sau khi nghiên cứu một chút về trình biên dịch và cách chúng hoạt động, tôi đã học được rằng quá trình này thường được chia thành 4 bước: Preprocessor, Compiler, Assembler và Linker. Cách tôi hình dung các bước này từng là chương trình riêng của nó; Một chương trình tiền xử lý, một chương trình biên dịch, một chương trình lắp ráp và một chương trình liên kết. Tuy nhiên, bạn biết rằng đôi khi quá trình tạo mã lắp ráp và tạo các tệp đối tượng là tất cả được xử lý bởi chương trình trình biên dịch và đôi khi nó không phải. Nó dường như phụ thuộc rất nhiều vào ngữ cảnh và ngôn ngữ lập trình được sử dụng. Câu hỏi của tôi là quá trình dịch thuật điển hình được chia nhỏ như thế nào để dịch mã nguồn C++ thành mã máy?Trình biên dịch C++ điển hình xử lý những công việc gì?
- Trình xử lý trước có phải là chương trình riêng biệt từ trình biên dịch không? Hay là quá trình đó thường là một phần của chương trình biên dịch?
- Trình biên dịch thường chịu trách nhiệm về điều gì? Tạo mã lắp ráp và sau đó chuyển đổi sang mã máy?
- Trình liên kết có phải là chương trình riêng biệt riêng được chạy sau khi trình biên dịch kết thúc không?
Lưu ý phụ: Câu hỏi của tôi khác với các trình biên dịch C++ khác vì tôi hỏi không chỉ trình biên dịch hoạt động như thế nào, nhưng nếu một số quy trình khác, chẳng hạn như liên kết, có chương trình thực thi riêng. vào một chương trình biên dịch.
Bản sao có thể có của [Trình biên dịch C/C++ hoạt động như thế nào?] (Http: // stackoverflow.com/questions/1085490/how-do-c-c-compilers-work) – wimh
Trình xử lý trước, front-end, back-end (trình tạo mã và trình tối ưu hóa), trình liên kết. Vẫn còn sử dụng một bộ lắp ráp là hiếm ngày hôm nay, quá chậm. Không thực sự là thẳng về phía trước nữa, trình biên dịch có thể dừng ở mặt trước và tạo ra mã trung gian. Được tiêu thụ bởi trình liên kết có thể bắt đầu back-end để thực hiện tối ưu hóa toàn bộ chương trình. –
"bằng cách sử dụng một assembler là hiếm ngày hôm nay" tốt đẹp, rõ ràng không ai đang sử dụng gcc ngày hôm nay. Hoặc llvm với một mục tiêu mà nó không đi kèm với một bộ tích hợp. Hoặc nhiều mục khác ... –