2013-06-28 33 views
7

Tôi đã xem xét một số mã CFArray sau khi tìm ra nó là mã nguồn mở và tôi đã tìm thấy một số mã lạ. Điểm của những điều kiện "rỗng" if (0) này là gì? Có một số lợi ích điên rồ hoặc là điều này chỉ còn lại từ một cái gì đó? Mã này nằm trên line 957 của CFArray.c tại GitHub.Điểm của các điều kiện if (0) này là gì?

if (0) { 

} 
else if (NULL == array->_store) { 
    if (0) { 

    } 
    else if (0 <= futureCnt) { 
      // blah blah 
    } 
} 
+2

Dường như với tôi như là một "không thực thi mã này" hack. –

+0

Đó là những gì tôi nghĩ lúc đầu vì sự thụt đầu dòng nhưng nó thực sự là 'if (0) {} nếu if (validStuff) {}. – user988375

+0

có thể là một phần còn lại từ việc gỡ lỗi mã. nhưng tôi chỉ có thể đoán ... – katzenhut

Trả lời

7

Chúng có nhiều khả năng còn sót lại từ một trong nhiều di chuyển của codebase từ nền tảng đến nền tảng trong lịch sử nhiều năm của nó. Và, nói chung, nếu bạn có một công cụ tự động và chính xác di chuyển mã từ biểu mẫu A sang biểu mẫu B, bạn thường không muốn tự muck với nó sau khi thực tế vì có quá nhiều rủi ro khi đưa ra lỗi.

Nếu bạn đi ngược thời gian để chuyển đổi từ NeXTSTEP sang OpenStep, có một công nghệ chuyển đổi được gọi là TOPS được sử dụng để tự động chuyển đổi từ API sang API. Một biến thể thứ hai được tạo ra để di chuyển từ Objective-C sang Java trong các ngày WebObjects.

Đó là, một cách hiệu quả, một loại động cơ tái cấu trúc tự động tập trung vào API và ngôn ngữ phát tín hiệu.

TOPS khá mạnh và có thể dễ dàng mở rộng. Nó đã được sử dụng khá hiệu quả để thực hiện các loại di chuyển - phiên bản, API, phong cách, v.v. - cả trong cộng đồng bên thứ 3 và bên trong của Apple/NeXT.

(Cá nhân, lần cuối tôi sử dụng TOPS là ~ 2002năm để di chuyển 750.000 dòng NeXTSTEP 3.3 Ứng dụng mục tiêu-C++ sang Mac OS X 10.2. Yêu cầu di chuyển từ 3.3 -> 4.2, 4.2 -> PR1, PR1 -> 10.2 Đã là một thách thức, nhưng rất nhiều niềm vui. Có một chút nền tảng ở đây: http://www.cocoabuilder.com/archive/cocoa/221418-porting-from-windows-to-mac.html.)

1

Có thể, đã được thực hiện để bỏ qua một thuật toán mã hóa mà không bị cảnh báo/lỗi unreachable code.

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