加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:45:04 所属栏目:百科 来源:网络整理
导读:我想对C/C++项目中的数据类型大小执行编译时检查,并且意外不匹配的错误.简单 #if sizeof foo_t != sizeof bar_t 不编译 – 声称sizeof不是一个正确的编译时常数. 所需的平台范围至少在Visual C与Win32 / 64以及GCC x86 / amd64上. 编辑:编译时,不一定是预处
我想对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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读