2013-01-31 30 views
14

Tôi muốn tạo ra một lỗi biên dịch thời gian trong mã C++ của tôi với một thông báo lỗi tùy chỉnh. Tôi muốn thực hiện việc này vì một vài lý do:Làm thế nào tôi có thể buộc một lỗi biên dịch trong C + +?

  • để buộc biên dịch thất bại trong khi tôi đang thực hiện các tính năng mới chưa được triển khai. (thời gian biên dịch! Lời nhắc TODO)
  • để tạo lỗi dễ đọc hơn khi cố triển khai chuyên môn mẫu không được hỗ trợ.

Tôi chắc chắn có một mẹo để thực hiện việc này nhưng tôi không thể tìm thấy tài nguyên giải thích phương pháp. Tôi sẽ quấn mã trong một #define của biểu mẫu COMPILE_FAIL ("thông báo lỗi");

Cảm ơn D

+2

Những gì bạn cần 'static_assert' là. http://stackoverflow.com/questions/6765770/compile-time-assertion – legends2k

+0

bạn đã thử #error chưa? – thang

+0

static_assert hoàn toàn thực hiện công việc trên msvc10 ... :-) –

Trả lời

32

Sử dụng #error:

#error "YOUR MESSAGE" 

Điều này tạo ra một lỗi từ tiền xử lý. Nếu bạn muốn phát hiện lỗi ở giai đoạn sau (ví dụ: trong quá trình xử lý mẫu), hãy sử dụng static_assert (tính năng C++ 11).

5

Để buộc một lỗi biên dịch (GCC, Clang phong cách):

#error "You ain't finished this yet!" 
16

Nhìn vào static_assert.

Ví dụ:

#include <iostream> 
#include <type_traits> 

template<typename T> 
class matrix { 
    static_assert(std::is_integral<T>::value, "Can only be integral type"); 
}; 

int main() { 
    matrix<int*> v; //error: static assertion failed: Can only be integral type 
} 
Các vấn đề liên quan