2009-10-09 3 views
6

다음 코드를 실행하려고합니다. Obfuscated C Code Contest의 1988 항목입니다.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 : $ DEITY에 대한 Inf : – Jacob

+1

@Pax : 무한한 신성 모독에 대한 :) – DVK

답변

10

GCC를 사용하는 경우 '-traditional-cpp'플래그로 컴파일하십시오.

'-_'시퀀스가 '- -F<00'또는 '--F<00'으로 변환되는지 여부가 다릅니다.

하나의 공간이 중요합니다. 이중 부정과 사전 감소의 차이입니다.

+1

불행히도 OP는 자신의 컴파일러를 마지막 문장, 우리 중 대부분 (몇 초 전까지 나 자신이 포함)이 독서를 멈출 때. 그/그녀는 VS2008을 사용하고 있습니다. –

+0

모자 벗고. 나는 컨버전스 과정을 보았다. (프로그램은 실제로 "자신의 영역에서"작동하지 않는다. 반복은 단지 귀여운 방식으로 이루어진다.) 그러나이 해석은 -_ 와우이다. – mjv

+0

@Chris : VS2008을 보았습니다. 나는 그것을 가지고 있지 않다. 나는 VS2008이 -traditional-cpp와 동등한 것을 지원할 것이라는 나의 의구심을 가지고있다. 그것이 내가 'if'를 앞에 놓은 이유입니다. –

2

변화 라인 : $ 신 (神)의 사랑을 위해

#define _ F-->00 || F-OO--; 
관련 문제