我想对C/C++项目中的数据类型大小执行编译时检查,并且意外不匹配的错误.简单
#if sizeof foo_t != sizeof bar_t
不编译 – 声称sizeof不是一个正确的编译时常数.
所需的平台范围至少在Visual C与Win32 / 64以及GCC x86 / amd64上.
编辑:编译时,不一定是预处理.只是不是运行时错误.
解决方法
你有两个选择:
a)C11 static_assert
我更喜欢第一个.
编辑:
预处理器不是真正的语言的一部分,因为名称说它预处理一个文件,它没有语言的知识,所以它不知道sizeof.
template <typename T,bool x = sizeof(T) == 4> class X; template <typename T> class X<T,true> { T v; const char* msg() const { return "My size is 4"; } } template <typename T> class X<T,false> { T v; const char* msg() const { return "My size is NOT 4"; } } X<int> a; X<short> b;