2010-02-19 24 views
7

Tôi có đoạn mã sau:#warning và đánh giá vĩ mô

#define LIMIT_DATE \"01-03-2010\" 

#ifdef LIMIT_DATE 
    #if _MSC_VER 
     #pragma message ("Warning : this release will expire on " LIMIT_DATE) 
    #elif __GNUC__ 
     #warning ("Warning : this release will expire on " LIMIT_DATE) 
    #endif 
#endif 

Vấn đề là LIMIT_DATE là không được đánh giá khi in cảnh báo.

Tôi đã tìm kiếm trên Google nhưng chưa tìm thấy giải pháp.

Cảm ơn bạn đã trợ giúp.

+0

Trên GNU? Nó có trong MSVC. Macro không mở rộng đối số macro của chúng và tôi không thấy cách làm việc này theo cách bạn muốn. – GManNickG

+0

Đối với những gì nó có giá trị, bạn chỉ có thể làm '#define LIMIT_DATE" 01-03-2010 "'. Tôi nghĩ rằng đó là bất hợp pháp để thoát ra ngoài một chuỗi. – GManNickG

Trả lời

5

From gcc preprocessor documentation

Cả #error cũng không #warning vĩ mô mở rộng đối số của nó. Các chuỗi khoảng trắng khoảng trắng nội bộ được thay thế bằng một khoảng trắng. Dòng phải bao gồm mã thông báo hoàn chỉnh. Đó là thông minh nhất để làm cho đối số của các chỉ thị này là một chuỗi đơn không đổi; điều này tránh được sự cố với dấu nháy đơn và các nội dung tương tự.

Vì vậy, không thể có ít nhất trong gcc.

Theo MSDN điều này sẽ phù hợp với MSVC, tôi không có quyền truy cập vào Visual Studio hiện tại để kiểm tra điều này