2016-01-29 46 views
0

我有,預處理器指令列表:如何使用cppunit聲明宏來檢查返回數據類型的預處理器值?

#define __SIZE_TYPE__ long unsigned int 
#define __UINT16_TYPE__ short unsigned int 
#define __UINT_LEAST8_TYPE__ unsigned char 
#define __VERSION__ 4 
. 
. 

現在我寫這將檢查這些指令值如下:a CppUnit的測試案例:

CPPUNIT_ASSERT_EQUAL(4, __VERSION__); 

現在我想寫相同的CppUnit斷言爲UINT16_TYPE,SIZE_TYPE,UINT_LEAST8_TYPE爲了確保他們有正確的價值,但我沒有得到哪個cppunit斷言我應該使用?那麼,請建議哪個cppunit斷言用於此目的?

+2

您是否在自己的頭文件中爲自己的項目自己定義了這些宏?那就不要。以雙下劃線開頭的名稱[保留在實現的所有作用域中(編譯器和標準庫)](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-在-AC-標識符)。 –

+0

@JoachimPileborg不,我自己沒有定義它們,它們是由gcc -dM -E - Learner

回答

0

按照他們的名字來看,它們似乎是用於標頭文件中定義的「標準」整數的宏。

在這種情況下,__UINT16_TYPE__應該是一個無符號的16位值,它很容易測試。你可以做例如

CPPUNIT_ASSERT_EQUAL(2, sizeof(__UINT16_TYPE__)); 

這當然依賴於你在一個基於8位字節的「普通」計算機。

要檢查類型,可以使用C++ 11 type-traits,如std::is_integralstd::is_unsigned

我真的沒有看到做這些檢查的重點。如果這些宏由編譯器生成,那麼您可以確信它們對於您所在的平臺是正確的。

+1

Plus CPPUNIT_ASSERT_GREATER(0,static_cast <__ UINT16_TYPE __>( - 1));'。 –

+0

CPPUNIT_ASSERT_GREATER只在cppunit的未發佈主分支中。 – moggi

0

如果您使用的是C++ 11,請使用std :: is_same來檢查類型。 http://en.cppreference.com/w/cpp/types/is_same

例如:CPPUNIT_ASSERT(標準:: is_same < SIZE_TYPE,長無符號整型> ::值)

但坦率地說,我沒有看到在此類檢查任何理由。