2009-02-25 21 views
110

Mi chiedevo se c'è qualcosa come un interprete per C. Cioè, in un terminale Linux posso digitare "python" e quindi scrivere il codice nell'interprete. (Non sono sicuro che interpreti la parola giusta). Questo è davvero utile per testare cose diverse e sono curioso di sapere se esiste qualcosa di simile per C. Anche se ne dubito. L'unica cosa che posso pensare che sarebbe fare sarebbe la shell C ...Esiste un interprete per C?

+5

La parola corretta per ciò che si vuole è "shell" o "Chiedi conferma" o "REPL" (Read-Eval-Print-Loop, in riferimento ai 4 comandi Lisp che devono essere uniti per fare un interprete Lisp in Lisp), ma un interprete funzionerebbe. –

+1

Per inciso, il termine che stai cercando è REPL (Leggi Evaluate Print Loop). – Travis

+0

duplicato di [Esiste un REPL per la programmazione C?] (Http://stackoverflow.com/q/10766900/309483) –

risposta

72

There are many - se si restringe l'ambito della domanda, potremmo essere in grado di suggerire alcuni specifici per le vostre esigenze.

Un interprete degno di nota è "Ch: A C/C++ Interpreter for Script Computing" dettagliati nella Dr. Dobbs:

Ch è un interprete completo C che supporta tutte le caratteristiche del linguaggio e librerie standard della norma ISO C90 standard, ma si estende C con molte funzioni di alto livello come stringhe di tipo e computazionali come oggetti di prima classe.

Ch standard is freeware ma non open source. Solo Ch professional ha le capacità di tracciamento e le altre funzionalità che si potrebbero desiderare.

Non l'ho mai guardato prima, ma avere un interprete c a portata di mano sembra molto utile, e qualcosa che probabilmente aggiungerò al mio set di strumenti. Grazie per la domanda!


Edit:

appena scoperto che uno dei miei compilatori preferiti, TCC, eseguirà script C:

Gestisce anche i file di script C (solo aggiungere la linea shebang "#!/usr/local/bin/tcc -run" alla riga del file di codice sorgente C su Linux per eseguirlo direttamente.

TCC può leggere il codice sorgente C dall'ingresso standard quando '-' è utilizzato nella posizione di 'infile'. Esempio:

echo 'main(){puts("hello");}' | tcc -run - 
+2

Vorrei che una versione di CH fosse disponibile sotto una licenza approvata OSI, in modo che potesse essere distribuita. È possibile progettare utilities veramente belle usando il loro interprete, purtroppo sono troppo problematiche da raggruppare. –

+0

Sarebbe bello. Il freeware è meglio di niente, ma fino a quando qualcuno lo fa ... –

+0

Stranamente, 'tcc' esce con lo stato' 10' di default. Sembra che tu debba aggiungere esplicitamente un 'return 0' dando' echo 'main() {puts ("hello"); restituisce 0;} '| tcc -run -' –

4

cinterp è uno per iniziare.

+7

Ti riferisci a https://github.com/danielkeller/cinterp oa http://free-compilers.sharnoff.org/TOOL/C-12.html? Un collegamento migliorerebbe questa risposta ... – f3lix

1

E 'stato fatto, anche se la maggior parte del lavoro C viene compilato. Un esempio è CH

7

Dai uno sguardo allo Ch Interpreter.

Ch è un embeddable C/C++ interprete per lo scripting cross-platform, guscio programmazione, 2D/3D plotting, numerica computing e di scripting incorporato.

9

il progetto ROOT fornisce un interprete C e C++ molto funzionale denominato Cint. Sono abbastanza affezionato. Ci vuole un po 'per abituarsi all'interpretazione, però.

TCC è una scelta molto buona pure, ma io non sono in grado di garantire per la sua REPL

+1

La squadra ROOT non sta eliminando Cint? –

+0

@Zboson "Il CERN è passare a un nuovo interprete, si aggrappano. CINT non è supportato da CERN più" – endolith

6

So che usiamo CINT in classe. Sembrava abbastanza bello che tu volessi provarlo!

5

Orario di partenza iGCC

18

picoc - Una piccolissima C interprete

PicoC è un piccolo interprete C per lo scripting. Originariamente era scritto come linguaggio di script per il sistema di volo di bordo di un UAV. È anche molto adatto per altre applicazioni robotizzate, incorporate e non incorporate .

3

ccons sembra soddisfare i vostri vincoli:

L'obiettivo del progetto ccons è quello di creare una console interattiva per il linguaggio di programmazione C, simile a "python" e "IRB" per Python e Ruby, rispettivamente. Il progetto si basa su clang e llvm.