2009-10-09 32 views
6

Tôi đang cố gắng thực thi mã sau đây là mục nhập năm 1988 của Cuộc thi mã C bị bẻ khóa.Làm thế nào để chuyển đổi từ K & R C tới 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() 
{ 
      _-_-_-_ 
     _-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_-_-_ 
    _-_-_-_-_-_-_-_-_-_-_-_ 
     _-_-_-_-_-_-_-_ 
      _-_-_-_ 
} 

Từ mô tả mục nhập, mã này đang tính toán pi bằng cách xem khu vực của riêng nó. Tôi đã biên dịch thành công nó mà không thay đổi mã. Nhưng khi tôi thực hiện, nó mang lại cho tôi một giá trị 0,25, những gì tôi mong đợi là 3,14. Mã mô tả nói rằng nó là trong K & R C và nó không hoạt động chính xác trong ANSI C mà không có một số thay đổi. Tôi nghĩ tôi phải thực hiện những sửa đổi đó để thực thi nó đúng cách. Tôi không có bất kỳ kinh nghiệm trước đó với K & R C. Vì vậy, ai đó có thể giúp tôi thay đổi mã trên để ANSI C hoặc điểm đến các vấn đề nếu có. Tôi đang sử dụng Microsoft Visual Studio 2008 để thực hiện điều này.

+7

Đối với tình yêu của $ thần, tại sao? Tôi không thể thấy điều này là hữu ích nhất. Các cuộc thi obfuscated là tốt như một cách để hiển thị như thế nào "thông minh" bạn có thể được, nhưng họ thực sự có ít liên quan trong thế giới thực. Lời khuyên của tôi, tìm một vấn đề thực sự và giải quyết nó. – paxdiablo

+1

@Pax: + Inf cho $ DEITY :) – Jacob

+1

@Pax: -Inf cho báng bổ vô hạn :) – DVK

Trả lời

10

Nếu bạn có GCC, hãy biên dịch với cờ '-traditional-cpp'.

Sự khác biệt là liệu chuỗi '-_' có được dịch sang '- -F<00' hoặc '--F<00' hay không.

Không gian một là rất quan trọng: đó là sự khác biệt giữa hai lần phủ định và giảm trước.

+1

Thật không may, OP ẩn trình biên dịch của họ trong câu cuối cùng, khi hầu hết chúng ta (bản thân mình được đưa vào cho đến vài giây trước) dừng đọc. Anh/Cô ấy đang sử dụng VS2008. –

+0

Mũ nón, thưa ngài. Tôi thấy quá trình hội tụ (chương trình không thực sự hoạt động "ngoài khu vực riêng của nó", các lần lặp lại chỉ được sắp xếp theo kiểu dễ thương), nhưng chi tiết này trong việc giải thích -_ wow! – mjv

+0

@Chris: Tôi thấy VS2008; Tôi không có nó. Tôi có những nghi ngờ của tôi rằng VS2008 sẽ hỗ trợ tương đương với -raditional-cpp. Đó là lý do tại sao tôi đặt 'if' lên phía trước. –

Các vấn đề liên quan