2015-06-10 9 views
5

Tôi biết có những thay đổi nhỏ đối với C++ như C++ 11 hoặc C++ 14. Nếu tôi có một vi điều khiển hoặc thiết bị máy tính khác, nó sẽ xác định xem mã nào có thể chạy trên máy tính đó. I E. những gì xác định nếu Arduino có thể chạy mã C++ 14 hay không?C++ Điều gì quyết định phiên bản nào của C++ có thể chạy trên một kiến ​​trúc cụ thể (như Arduino)

Có phải trình biên dịch trên máy của tôi, trình thông dịch trên bộ xử lý của hệ thống khác hay không?

+5

Tôi chắc chắn hy vọng C++ không _interpreted_ trên Arduino. Tất cả những gì bạn cần là trình biên dịch C++ 11/C++ 14 nhắm vào nền tảng của bạn. Ngoài ra, tôi sẽ không gọi những thay đổi được giới thiệu bởi C++ 11 "những thay đổi nhỏ" bằng bất kỳ phương tiện nào. – dureuill

+0

@dureuill Tôi nhìn thấy và bởi nền tảng đó sẽ là bất cứ điều gì chip là trên Arduino? (như ARM 32 hay gì đó)? – Startec

+2

Arduino không phải là một kiến ​​trúc. Arduiono chạy trên AVR, ARM, ... Nó chỉ đơn giản là một tập hợp các chức năng/lớp học giúp nhanh chóng phát triển truy cập vào phần cứng UC và cung cấp một số công cụ trợ giúp bổ sung. Trình biên dịch phải tạo mã cụ thể cho thiết bị cơ sở và các libs cụ thể của CPU phải được chọn từ môi trường biên dịch (Makefile, IDE, ...) – Klaus

Trả lời

7

Đây là phiên bản của trình biên dịch. Nếu trình biên dịch hỗ trợ phiên bản cú pháp/C++ và nếu trình biên dịch phù hợp với nền tảng - thì mã hợp lệ sẽ được tạo ra.

+0

Vì vậy, nếu trình biên dịch có thể biên dịch mã cho nền tảng (có nghĩa là, trong trường hợp này là Arduino) và trình biên dịch có thể hiểu phiên bản của C++ rồi mã runnable sẽ được sản xuất? – Startec

+2

@Startec - vâng, chính xác. –

5

@Kiril Kirov câu trả lời là chính xác, nó phụ thuộc chủ yếu vào tính khả dụng của trình biên dịch, nhưng một số yếu tố khác đang bị đe dọa.

Trình biên dịch chịu trách nhiệm chuyển mã C++ thành mã máy trong tập lệnh gốc. Nó cũng dựa trên thư viện chuẩn C++ mà rõ ràng là cần phải được compilable cho hệ thống của bạn bằng cách sử dụng trình biên dịch nói. Lưu ý rằng sau thao tác này, mã sản xuất không khác với mã gốc khác được tạo ra bởi các phương tiện khác (sử dụng trình biên dịch C hoặc được viết bằng tay), vì vậy không có lý do gì nó sẽ không được thực thi bởi bộ vi xử lý của bạn.

Bạn cũng cần một trình liên kết biết bố cục bộ nhớ của vi điều khiển đích (bộ xử lý + RAM + bộ nhớ flash hoặc ROM).

Bạn cũng cần có cách để flash mã vào hệ thống của mình, chẳng hạn như liên kết USB và trình điều khiển. Trong trường hợp của Arduino, bạn có thể tìm thấy tất cả các phần tử này vì nó là một nền tảng đã biết (Arduino chạy trên AVR hoặc ARM tùy thuộc vào phiên bản, vì vậy các trình biên dịch có thể tương ứng là avr-gcc hoặc arm-none-eabi-gcc), nhưng trong trường hợp ngoại lệ hơn nó không phải là một cho (có thể là bạn không thể flash Mastercard của bạn).

0

Bất kỳ nền tảng máy tính nào cũng có thể hỗ trợ bất kỳ ngôn ngữ lập trình tùy ý nào miễn là ai đó đã viết trình biên dịch cho nó.

Chính bộ vi xử lý không biết ngôn ngữ lập trình nào được sử dụng, nhưng ngay cả khi nó không nhất thiết loại trừ hỗ trợ cho các ngôn ngữ hoặc phương ngữ khác trong trình biên dịch thông qua dịch mã nguồn.

Cho dù bạn nhận được các tiêu chuẩn C++ mới hỗ trợ trên Arduino của bạn hoàn toàn là ý thích của những người đang cung cấp chuỗi công cụ biên dịch và thư viện chuẩn mà bạn đang sử dụng.

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