有没有办法在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的内容.
预处理器在不知道任何类型的情况下工作,甚至是内置的.
顺便说一句,你仍然可以使用类似static_assert的功能进行检查(例如,boost有一个,C++ 0X就有一个).
编辑:C99和C++ 0X也有WCHAR_MIN和WCHAR_MAX宏<stdint.h>