Как конфертировать из K & R C в ANSI C? - PullRequest
6 голосов
/ 09 октября 2009

Я пытаюсь выполнить следующий код, который является записью 1988 года конкурса кодов с запутанным кодом.

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

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

Ответы [ 2 ]

10 голосов
/ 09 октября 2009

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

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

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

2 голосов
/ 15 марта 2011

изменить строку:

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