2009-10-09 1 views
6

Я пытаюсь выполнить следующий код, который является записью 1988 года Obfuscated C Code Contest.Как конфертировать из K & R C в 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() 
{ 
      _-_-_-_ 
     _-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_ 
     _-_-_-_-_-_-_-_ 
      _-_-_-_ 
} 

Из описания заявки этот код вычисляет pi, просматривая его собственную область. Я успешно скомпилировал его без изменения кода. Но когда я выполнил, он дает мне значение 0,25, то, что я ожидаю, составляет 3,14. Описание кода говорит, что оно находится в K & R C, и оно не работает корректно в ANSI C без каких-либо изменений. Я думаю, что я должен выполнить эти изменения, чтобы выполнить его правильно. У меня нет предыдущего опыта работы с K & R C. Так может кто-то помочь мне изменить код выше на ANSI C или указать на проблемы, если таковые имеются. Для этого я использую Microsoft Visual Studio 2008.

+7

За любовь $ БОЖЕСТВ, почему? Я не вижу в этом ничего полезного. Обфусканные соревнования прекрасны, как способ показать, насколько «умными» вы можете быть, но они действительно мало релевантны в реальном мире. Мой совет, найти настоящую проблему и решить ее. – paxdiablo

+1

@Pax: + Inf для $ DEITY :) – Jacob

+1

@Pax: -Inf для бесконечного богохульства :) – DVK

ответ

10

Если у вас есть GCC, компилируйте его с помощью флага '-traditional-cpp'.

Разница в том, переведена ли последовательность '-_' на '- -F<00' или '--F<00'.

Одно пространство имеет решающее значение: это разница между двойным отрицанием и преде декрементом.

+1

К сожалению, OP спрятал свой компилятор в последнее предложение, когда большинство из нас (включая меня еще пару секунд назад) перестают читать. Он/она использует VS2008. –

+0

Шляпы, сэр. Я видел процесс конвергенции (программа на самом деле не работает «с его собственной области», итерации просто организованы милым образом), но эта деталь в интерпретации -_ вау! – mjv

+0

@ Крис: Я видел VS2008; У меня его нет. У меня есть сомнения, что VS2008 будет поддерживать эквивалент -traditional-cpp. Вот почему я поставил «если» вперед. –