gpt4 book ai didi

c++ - 结构偏移量不同?

转载 作者:IT王子 更新时间:2023-10-29 00:41:16 25 4
gpt4 key购买 nike

通常我会露出灿烂的笑容,但它太狡猾了,一点都不好笑。一个文件与另一个文件之间的结构到底有何不同?

我有一个这样的结构:

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

在“header02.cpp”中定义了另一个名为 g_sig_1 的对象 pp_sig_t...这个 .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 中不同...

一个文件与另一个文件之间的结构到底有何不同?我们如何在不使用 pragma 的情况下避免这种情况?它可以称为编译器错误吗(我在 Linux 上使用 Intel C++ XE Composer 2013 Update 2)?

最佳答案

这似乎是 引起 的对齐编译指示,当其中一个文件包含 header 时,该编译指示在范围内,而另一个文件包含 header 时则不在范围内。

关于c++ - 结构偏移量不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16576220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com