用于测试整数类型是有符号还是无符号的宏

bot*_*ius 17 c c++

您将如何编写(在C/C++中)一个宏来测试整数类型(作为参数给出)是签名还是未签名?


      #define is_this_type_signed (my_type) ...

Chr*_*isN 39

在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
Run Code Online (Sandbox Code Playgroud)

请参阅http://msdn.microsoft.com/en-us/library/85084kd6(VS.80).aspx.

  • 同意,但在 IMO 中应尽可能避免在 C++ 中使用宏。 (2认同)

Fab*_*llo 26

如果您想要的是一个简单的宏,这应该可以解决问题:

#define is_type_signed(my_type) (((my_type)-1) < 0)
Run Code Online (Sandbox Code Playgroud)

  • 当唯一的变量是临时值0和-1时,怎么会有一个未初始化的变量? (14认同)