|
型名から有符号型か無符号型かを判定するマクロを作る。 #define is_signed(type) ( ((type)-1) < 0 ) #define is_unsigned(type) ( 0 < ((type)-1) ) is_signed マクロの動作を確認する#define is_signed(type) (((type)-1)<0) #define print_type(type) printf( "%16s: %s\n", #type, (is_signed(type) ? "signed" : "unsigned") ) //********************************************************* // is_signed マクロの使用例 //********************************************************* int main( void ) { print_type(char); print_type(unsigned char); print_type(short); print_type(unsigned short); print_type(int); print_type(unsigned int); print_type(long); print_type(unsigned long); print_type(float); print_type(double); // print_type(void); // コンパイルできません // print_type(bool); // コンパイルできません print_type(clock_t); print_type(ptrdiff_t); print_type(sig_atomic_t); print_type(size_t); print_type(time_t); print_type(wchar_t); print_type(wctrans_t); print_type(wctype_t); print_type(wint_t); return 0; }//main 実行結果
char: signed
unsigned char: unsigned
short: signed
unsigned short: unsigned
int: signed
unsigned int: unsigned
long: signed
unsigned long: unsigned
float: signed
double: signed
clock_t: signed
ptrdiff_t: signed
sig_atomic_t: signed
size_t: unsigned
time_t: signed
wchar_t: unsigned
wctrans_t: unsigned
wctype_t: unsigned
wint_t: unsigned
|
|