c – 数据类型大小的编译时间断言

前端之家收集整理的这篇文章主要介绍了c – 数据类型大小的编译时间断言前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想对C/C++项目中的数据类型大小执行编译时检查,并且意外不匹配的错误.简单
#if sizeof foo_t != sizeof bar_t

不编译 – 声称sizeof不是一个正确的编译时常数.

所需的平台范围至少在Visual C与Win32 / 64以及GCC x86 / amd64上.

编辑:编译时,不一定是预处理.只是不是运行时错误.

EDIT2:代码假定wchar_t是2个字节.我想要一个编译错误,如果它是意外编译与4字节wchar的.

解决方法

你有两个选择:

a)C11 static_assert

b)BOOST_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;

猜你在找的C&C++相关文章