整数型が符号付きか符号なしかをテストするマクロ

C++ では、std::numeric_limits<type>::is_signed を使用します .

#include <limits>
std::numeric_limits<int>::is_signed  - returns true
std::numeric_limits<unsigned int>::is_signed  - returns false

http://msdn.microsoft.com/en-us/library/85084kd6(VS.80).aspx を参照してください。


単純なマクロが必要な場合は、これでうまくいくはずです:

#define is_type_signed(my_type) (((my_type)-1) < 0)

マクロが必要な場合は、これでうまくいくはずです:

#define IS_SIGNED( T ) (((T)-1)<0)

基本的に、-1 を型にキャストして、まだ -1 かどうかを確認します。 C++ では、マクロは必要ありません。 #include <limits> だけ そして:

bool my_type_is_signed = std::numeric_limits<my_type>::is_signed;