2009-10-09 13 views
6

Sto provando ad eseguire il seguente codice che è l'entrata del 1988 di Obfuscated C Code Contest.Come convertire da K & R C a ANSI C?

#define _ -F<00||--F-OO--; 
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO() 
{ 
      _-_-_-_ 
     _-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_ 
     _-_-_-_-_-_-_-_ 
      _-_-_-_ 
} 

Dalla descrizione della voce, questo codice sta calcolando il pi guardando la propria area. L'ho compilato con successo senza modificare il codice. Ma quando eseguo, mi dà un valore di 0.25, quello che mi aspetto è 3.14. La descrizione del codice dice che è in K & R C e non funziona correttamente in ANSI C senza alcune modifiche. Penso di dover fare quelle modifiche per eseguirlo correttamente. Non ho alcuna esperienza precedente con K & R C. Quindi qualcuno può aiutarmi a modificare il codice sopra ANSI C o a indicare i problemi, se presenti. Sto usando Microsoft Visual Studio 2008 per eseguire questo.

+7

Per l'amore di $ divinità perché? Non riesco a vedere questo come il meno utile. Le competizioni offuscate vanno bene per dimostrare quanto sei "intelligente", ma hanno davvero poca rilevanza nel mondo reale. Il mio consiglio, trova un vero problema e risolvilo. – paxdiablo

+1

@Pax: + Inf per $ DEITY :) – Jacob

+1

@Pax: -Inf per blasfemia infinita :) – DVK

risposta

10

Se si dispone di GCC, compilare con il flag "-traditional-cpp".

La differenza è se la sequenza "-_" è convertita in "- -F<00" o "--F<00".

L'unico spazio è cruciale: è la differenza tra doppia negazione e pre-decremento.

+1

Sfortunatamente, l'OP ha nascosto il loro compilatore nel ultima frase, quando la maggior parte di noi (me inclusa fino a un paio di secondi fa) smette di leggere. Lui/lei sta usando VS2008. –

+0

Tanto di cappello, signore. Ho visto il processo di convergenza (il programma non sta realmente lavorando "fuori dalla sua area", le iterazioni sono organizzate in modo carino), ma questo dettaglio nell'interpretazione-wow! – mjv

+0

@Chris: ho visto il VS2008; Io non ce l'ho. Ho i miei dubbi sul fatto che VS2008 supporterà l'equivalente di -traditional-cpp. Questo è il motivo per cui ho messo il "se" davanti. –

2

cambiare la linea:

#define _ F-->00 || F-OO--;