Как конфертировать из 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
".
Единственное пространство имеет решающее значение: это разница между двойным отрицанием и предварительным декрементом.