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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |