[C/C++] 컴파일 타임에 ASSERT 시키기
CS/C/C++ 2009. 10. 14. 01:26원문 : WebKit JavaScriptCore
어떤 클래스의 크기를 제한 할 경우, 컴파일 타임에 클래스 크기를 확인하는 코드.
만약 클래스 크기가 CELL_SIZE보다큰 경우, Compile time error가 발생하게 된다.
error : size of array 'dummyclass_fits_in_cell' is negative.
아, 핵심은
#define COMPILE_ASSERT(exp, name) typedef int dummy##name [(exp) ? 1 : -1]
라는 거죠...
어떤 클래스의 크기를 제한 할 경우, 컴파일 타임에 클래스 크기를 확인하는 코드.
// tunable parameters template<size_t bytesPerWord> struct CellSize; // cell size needs to be a power of two for certain optimizations in collector.cpp template<> struct CellSize<sizeof(uint32_t)> { static const size_t m_value = 64; }; template<> struct CellSize<sizeof(uint64_t)> { static const size_t m_value = 64; }; const size_t MINIMUM_CELL_SIZE = CellSize<sizeof(void*)>::m_value; const size_t CELL_ARRAY_LENGTH = (MINIMUM_CELL_SIZE / sizeof(double)) + \ (MINIMUM_CELL_SIZE % sizeof(double) != 0 ? sizeof(double) : 0); const size_t CELL_SIZE = CELL_ARRAY_LENGTH * sizeof(double); #define COMPILE_ASSERT(exp, name) typedef int dummy##name [(exp) ? 1 : -1] #define ASSERT_CLASS_FITS_IN_CELL(class) \ COMPILE_ASSERT(sizeof(class) <= CELL_SIZE, class_fits_in_cell)
만약 클래스 크기가 CELL_SIZE보다큰 경우, Compile time error가 발생하게 된다.
error : size of array 'dummyclass_fits_in_cell' is negative.
아, 핵심은
#define COMPILE_ASSERT(exp, name) typedef int dummy##name [(exp) ? 1 : -1]
라는 거죠...