2009-07-27 32 views

Trả lời

16

Macro được xác định trước phụ thuộc vào tiêu chuẩn và cách trình biên dịch triển khai.

Đối với GCC: http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html

Đối với Microsoft Visual Studio 8: http://msdn.microsoft.com/en-us/library/b0084kay(VS.80).aspx

Trang này Wikipedia http://en.wikipedia.org/wiki/C_preprocessor#Compiler-specific_predefined_macros danh sách như thế nào để đổ vào một số các macro được xác định trước

+7

Chỉ cần ghi lại câu trả lời: gcc -dM -E -

0

Một chương trình có thể định nghĩa một macro ở một điểm, xóa định nghĩa đó sau, và sau đó cung cấp định nghĩa khác sau đó. Do đó, tại các điểm khác nhau trong chương trình, một macro có thể có các định nghĩa khác nhau, hoặc không có định nghĩa nào cả.

+0

Nói chung đúng đối với các macro, nhưng câu hỏi là về các macro được xác định trước – CsTamas

+0

@CsTamas: bạn có nói rằng bạn không thể xác định các macro được xác định trước không? –

+0

@ Mì lúa mì: Không, không nói vậy. Nhưng câu hỏi thì khác. – CsTamas

4

Nguồn có khả năng của các macro được xác định trước cho một kết hợp cụ thể của trình biên dịch và nền tảng là Predef project tại Sourceforge. Họ đang cố gắng duy trì một danh mục của tất cả các macro được xác định trước trong tất cả các trình biên dịch C và C++ trên tất cả các nền tảng. Trong thực tế, họ có phạm vi bảo hiểm của một số công bằng của các nền tảng cho GCC, và một số các trình biên dịch khác.

Họ đã đạt được điều này thông qua sự kết hợp giữa đọc tài liệu cẩn thận, cũng như tập lệnh trình bao tìm ra những macro nào được xác định trước một cách khó khăn: nó thử chúng. Sự hiểu biết của tôi là nó thực sự cố gắng mỗi chuỗi nó có thể tìm thấy trong hình ảnh thực thi của trình biên dịch và/hoặc tiền xử lý để xem nó có một ý nghĩa được xác định trước hay không.

Họ sẽ vui vẻ thêm bất kỳ thông tin nào họ chưa có vào cơ sở dữ liệu của họ.

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