C++在宏条件中获取类型的大小

Fir*_*cer 8 c++ macros sizeof

有没有办法在c ++中做这样的事情,似乎有些因为某种原因不能在那里使用?

#if sizeof(wchar_t) != 2
#error "wchar_t is expected to be a 16 bit type."
#endif
Run Code Online (Sandbox Code Playgroud)

mmm*_*mmm 14

不,这是无法做到的,因为所有宏扩展(#...事情)都是在预处理器步骤中完成的,该步骤对C++代码的类型一无所知,甚至不需要知道任何关于语言的知识. !它只是扩展/检查#...的东西,没有别的!

还有一些其他常见错误,例如:

enum XY
{
  MY_CONST = 7,
};

#if MY_CONST == 7
  // This code will NEVER be compiled because the pre-processor does not know anything about your enum!
#endif //
Run Code Online (Sandbox Code Playgroud)

您只能访问和使用#if中通过命令行选项定义到编译器或#define的内容.


APr*_*mer 7

预处理器在不知道任何类型的情况下工作,甚至是内置的.

顺便说一句,你仍然可以使用类似static_assert的功能进行检查(例如,boost有一个,C++ 0X就有一个).

编辑:C99和C++ 0X也有WCHAR_MINWCHAR_MAX<stdint.h>


EFr*_*aim 4

我认为像BOOST_STATIC_ASSERT这样的东西可能会有所帮助。