Tôi đã tự hỏi nếu có một cái gì đó giống như một thông dịch viên cho C. Đó là, trong một thiết bị đầu cuối Linux tôi có thể gõ "python" và sau đó mã trong thông dịch viên đó. (Tôi không chắc người phiên dịch đúng từ). Điều này thực sự hữu ích để thử nghiệm những thứ khác nhau và tôi tò mò nếu một cái gì đó tương tự tồn tại cho C. Mặc dù tôi nghi ngờ nó. Điều duy nhất tôi có thể nghĩ về điều đó sẽ làm điều đó sẽ là vỏ C ...Có thông dịch viên cho C không?
Trả lời
There are many - nếu bạn thu hẹp phạm vi câu hỏi của mình, chúng tôi có thể đề xuất một số yêu cầu cụ thể cho nhu cầu của bạn.
Một phiên dịch đáng chú ý là "Ch: A C/C++ Interpreter for Script Computing" chi tiết trong TS Dobbs:
Ch là một thông dịch viên C hoàn chỉnh hỗ trợ tất cả các tính năng ngôn ngữ và thư viện chuẩn của tiêu chuẩn ISO C90 , nhưng mở rộng C với nhiều tính năng cấp cao như chuỗi loại và mảng tính toán là đối tượng hạng nhất.
Ch standard is freeware nhưng không phải nguồn mở. Chỉ Ch chuyên nghiệp có khả năng âm mưu và các tính năng khác mà người ta có thể muốn.
Tôi chưa bao giờ xem xét điều này trước đây, nhưng có một thông dịch viên c trên âm thanh bàn tay rất hữu ích, và một cái gì đó tôi có thể sẽ thêm vào bộ công cụ của tôi. Cảm ơn câu hỏi!
Edit:
Chỉ cần phát hiện ra rằng một trong những trình biên dịch yêu thích của tôi, TCC, sẽ thực hiện C kịch bản:
Nó cũng xử lý các file C kịch bản (chỉ thêm dòng công việc "#!/usr/local/bin/tcc -run" vào dòng đầu tiên của tệp mã nguồn C trên Linux để nó được thực thi trực tiếp.
TCC có thể đọc mã nguồn C từ đầu vào tiêu chuẩn khi '-' được sử dụng trong vị trí của 'thông tin'. Ví dụ:
echo 'main(){puts("hello");}' | tcc -run -
Tôi muốn một phiên bản CH có sẵn theo giấy phép được OSI phê chuẩn, vì vậy nó có thể được phân phối. Bạn có thể thiết kế các tiện ích thực sự tốt đẹp bằng cách sử dụng trình thông dịch của họ, tiếc là chúng quá khó để đóng gói. –
Điều đó thật tuyệt. Phần mềm miễn phí tốt hơn là không có gì, nhưng cho đến khi có ai đó ... –
Lạ lùng, 'tcc' thoát với trạng thái' 10' theo mặc định. Có vẻ như bạn phải thêm một 'return 0' cho' echo 'main() {puts ("hello") một cách rõ ràng; return 0;} '| tcc -run -' –
cinterp
là một khởi đầu.
Bạn đang đề cập đến https://github.com/danielkeller/cinterp hoặc http://free-compilers.sharnoff.org/TOOL/C-12.html? Một liên kết sẽ cải thiện câu trả lời này ... – f3lix
Có thể. Có một số cho c + +. Xem Have you used any of the C++ interpreters (not compilers)? để biết các ví dụ. Chắc chắn cint sẽ ăn gần như mọi mã c với kết quả tốt và tcc quá nhanh đến nỗi bạn có thể sử dụng nó như một thông dịch viên.
Nó đã được thực hiện, mặc dù phần lớn công việc C được biên dịch. Một ví dụ là CH
Hãy xem qua số Ch Interpreter.
Ch là một C nhúng/C++ phiên dịch cho cross-platform kịch bản, bao lập trình, 2D/3D âm mưu, số máy tính, và kịch bản nhúng.
dự án ROOT cung cấp một thông dịch viên C và C++ rất chức năng được gọi là Cint. Tôi khá thích nó. Phải mất một chút nhận được sử dụng để giải thích, mặc dù.
TCC cũng là một lựa chọn tốt, nhưng tôi không thể chứng minh cho REPL
Không phải nhóm ROOT đang loại bỏ Cint? –
@Zboson "CERN đã chuyển sang một thông dịch viên mới, bám víu. CINT không được CERN hỗ trợ nữa" – endolith
Tôi biết chúng tôi sử dụng CINT trong lớp học. Nó có vẻ khá tốt, bạn có thể muốn cho nó một thử!
Kiểm tra thực tế iGCC
picoc - Một C phiên dịch rất nhỏ
PicoC là một thông dịch viên C rất nhỏ so với kịch bản. Ban đầu nó được viết là được viết dưới dạng ngôn ngữ kịch bản cho hệ thống chuyến bay trên tàu của UAV. Nó cũng rất thích hợp cho các ứng dụng rô bốt, không nhúng khác.
ccons xuất hiện để đáp ứng hạn chế của bạn:
Mục tiêu của dự án ccons là tạo ra một giao diện điều khiển tương tác cho các ngôn ngữ lập trình C, tương tự như "trăn" và "IRB" cho Python và Ruby tương ứng. Dự án xây dựng trên đầu trang của clang và llvm.
Bạn có thể sử dụng CompCert. Dưới đây là một số ví dụ: http://compcert.inria.fr/man/manual004.html
Từ chính xác cho những gì bạn muốn là "vỏ" hoặc "nhắc nhở" hoặc "REPL" (Read-Eval-Print-Loop, liên quan đến 4 lệnh Lisp phải được kết hợp để tạo một trình thông dịch Lisp trong Lisp), nhưng một trình thông dịch sẽ hoạt động. –
Như một sang một bên, thuật ngữ bạn đang tìm kiếm là REPL (Đọc Đánh giá In Vòng lặp). – Travis
trùng lặp của [Có REPL cho lập trình C không?] (Http://stackoverflow.com/q/10766900/309483) –