通常我会有一个很好的笑容,但它如此鬼鬼祟祟,甚至不好笑.
一个结构在一个文件到另一个文件之间的区别怎么样?
一个结构在一个文件到另一个文件之间的区别怎么样?
我有一个像这样的结构:
typedef struct pp_sig_s { [...] int flags; size_t max; bool is_reversed; unsigned int sig[64]; size_t byref; [...] } pp_sig_t;
它被定义为“header01.h”
我使用的一些功能是在“program01.cpp”中
这样宣布
void PrintSig(pp_sig_t *s); // prints the content of sig[64] array in pp_sig_t for test purposes
另一个名为pp_sig_t的对象g_sig_1在“header02.cpp”中定义…
这个.cpp当然包括header01.h
我在里面用这种方式调用打印例程
PrintSig(&g_sig_1);
我注意到打印结果与实际内容不同.
假设sig包含0xE8,然后打印0xE800
然后,我想,大约2个小时的调查,它可能是结构对齐.
我试试看……
在header01.h中以这种方式声明结构
#pragma push() #pragma pack(4) typedef struct pp_sig_s { [...] int flags; size_t max; bool is_reversed; unsigned int sig[64]; size_t byref; [...] } pp_sig_t; #pragma pop()
突然间一切正常……
所以基本上就像在program01.cpp中一样,结构偏移是,我猜,与program02.cpp不同…
结构与一个文件有什么不同?如何在不使用编译指示的情况下避免这种情况?它可以被称为编译器错误(我在Linux上使用Intel C XE Composer 2013 Update 2)吗?
解决方法
似乎这可能是由于其中一个文件包含标题时范围内的对齐编译指示引起的,但是当另一个文件包含标题时则不然.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。