Wie kann ich dieses 1989 geschriebene C-Programm kompilieren und ausführen?

8

Ich fand dieses erstaunliche Werk von Arthur Whitney - Ссылка

Es wurde mit ein paar Warnungen zusammengestellt

%Vor%

Bei der Eingabe einer Basiseingabe 1 + 1 wurde jedoch ein Fehler festgestellt.

%Vor%

Ich vermute, das hat etwas mit dem Unterschied im C-Compiler seit 1989 zu tun.

Wie könnte ich das ausführen? Kann ich das auf dem letzten Linux / Mac arbeiten? oder auf einer VirtualBox VM? oder irgendetwas anderes?

Meine Google-Suchanfragen haben nichts ergeben.

    
user1527166 11.12.2012, 19:28
quelle

4 Antworten

9

Konvertiert Zeiger in int und long und umgekehrt. Dies bricht mit 64-Bit-Architekturen, in denen sie unterschiedliche Größen haben.

Kompilieren Sie es für ein 32-Bit-Ziel. Zum Beispiel mit "-arch i386" mit clang / LLVM unter Mac OS X.

    
Eric Postpischil 11.12.2012, 19:40
quelle
4

Ich würde eine Vermutung wetten, dass es deswegen segfault hat:

  

incuna.c: 8: 15: Warnung: Inkompatible implizite Deklaration der eingebauten Funktion 'malloc' [standardmäßig aktiviert]

Wenn malloc nicht deklariert wird, wird es Ihnen keinen Speicher zuweisen, und Sie werden am Ende einen Nullwert dereferenzieren, was zu einem seg-Fehler führen könnte.

Nach dem Einfügen:

%Vor%

Die Warnungen für printf() , malloc() und strlen() sind weg. Der Code wird ausgeführt und funktioniert, wenn Sie Folgendes eingeben:

%Vor%

Beachten Sie, dass der Abstand wichtig ist :

%Vor%

wird segfault.

    
Mike 11.12.2012 19:33
quelle
4

Führen Sie es nur durch den Präprozessor:

gcc -E interp.c & gt; interp-pp.c

Dann prettieren Sie es in einem Editor und verwenden Sie dann einen Debugger, um zu sehen, was es tut.

    
paul tarvydas 11.12.2012 20:19
quelle
1

Auf meinem System (AMD64 Win 8) scheint es, dass Pointer-Werte oft das oberste Bit gesetzt haben, also behandelt ein Zeiger als Integer (was dieses Programm tut) sich schlecht benehmen und abstürzen.

Wenn Sie die Funktion qv(a) ("Abfrageverb") ändern, kann das Programm ausgeführt werden:

%Vor%

sollte

sein %Vor%

oder

%Vor%

Hier ist ein Link zu einer minimal-modifizierten Version , die ohne Warnungen kompiliert werden sollte (mit gcc, default Optionen) und Ausführen (mit korrekter Eingabe).

    
luser droog 18.03.2014 06:55
quelle