2011-11-17 27 views
13

Tôi đang cố gắng chuyển một số mã C tương đối hiện đại sang trình biên dịch cũ hơn.Cuộn cảm trình biên dịch C cũ trên #ifndef #define

trình biên dịch này (DICE), có vẻ như, cuộn cảm trên tập tin tiêu đề đầu tiên và xuất hiện đầu tiên của thành ngữ này:

#ifndef SOMETHING 
#define SOMETHING 

... 

#endif /* SOMETHING */ 

nó chết trên dòng thứ hai trong phần đầu với: DCPP: "../../code/someheader.h" L:2 C:0 Error:39 Syntax Error

Thay đổi thành #define SOMETHING 1 không có sự khác biệt. Vì vậy, tôi thực sự có hai câu hỏi, tôi có sử dụng DICE với tùy chọn sai hay một cái gì đó, hoặc các lập trình viên C có sử dụng một số thành ngữ khác bằng ifndef-xác định trở lại trong những ngày cũ không? Không.

Tài liệu tham khảo:

+2

Nếu đó là [trình biên dịch DICE] này (http://www.obviously.com/amiga/) thì chắc chắn được sử dụng để làm việc với các nhân viên bảo vệ điển hình. – tinman

+1

Ấn bản đầu tiên của tôi (ấn bản thứ 21) K & R mô tả #ifndef trên trang 208, do đó, nó đã được khoảng một thời gian. –

+2

Ooh, câu hỏi đó mang lại những kỷ niệm! Tôi thậm chí trả tiền cho phiên bản phần mềm chia sẻ. :) Bên cạnh đó, nó sẽ làm việc, nếu không tất cả các tiêu đề hệ thống sẽ thất bại là tốt. –

Trả lời

16

Nếu đó là this C compiler sau đó bằng cách nhìn vào sources (src \ dcpp \ cpp.c), bạn có thể thấy rằng dòng mới chỉ bao gồm các nhân vật vận chuyển trở lại và không phải là nhân vật linefeed.

Nếu bạn có một dòng kết thúc với CRLF sau đó khi trình biên dịch dải các khoảng trắng ở đầu dòng, nó không tước linefeed trước # mà là một lỗi cú pháp, vì chỉ thị tiền xử lý bắt đầu với # phải là ký tự không khoảng trắng đầu tiên trong dòng.

+3

Heh, bạn đánh bại tôi một giây :) Tôi sẽ xóa câu trả lời của tôi, thưởng thức đại diện. – interjay

+0

@interjay: Cảm ơn, rất thể thao của bạn :) – tinman

+0

Cảm ơn tất cả các bạn, rất tốt khi thấy rất nhiều người hiểu biết về C và Amiga bị nhiễm độc.:-) –

3
#if SOMETHING 
#else 




#endif 

chỉ có thể làm việc ở khắp mọi nơi

+0

aha! sẽ thử rằng –

+0

Cảm ơn bạn! Đó không phải là nó nhưng có thể giúp một trình biên dịch khác. –

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