Как конфертировать из K&R C в ANSI C?

Я пытаюсь выполнить следующий код, который является записью Конкурса кодов C в 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 ответа

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

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

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

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

#define _ F-->00 || F-OO--;
Другие вопросы по тегам