C++ c++;pragma包的值错误
header1.hC++ c++;pragma包的值错误,c++,struct,pragma,memory-alignment,pack,C++,Struct,Pragma,Memory Alignment,Pack,header1.h #pragma pack(4) #include <iostream> struct my_struct { unsigned int a; double b; }; __forceinline void show_h(my_struct* my_struct_ptr) { std::cout << sizeof(my_struct) << '\t' << my_struct_ptr->b <<
#pragma pack(4)
#include <iostream>
struct my_struct
{
unsigned int a;
double b;
};
__forceinline void show_h(my_struct* my_struct_ptr)
{
std::cout << sizeof(my_struct) << '\t' << my_struct_ptr->b << '\n';
}
void show_cpp(my_struct*);
header2.h
#pragma pack(4)
#include <iostream>
struct my_struct
{
unsigned int a;
double b;
};
__forceinline void show_h(my_struct* my_struct_ptr)
{
std::cout << sizeof(my_struct) << '\t' << my_struct_ptr->b << '\n';
}
void show_cpp(my_struct*);
摆脱
header1.h
并执行以下操作
#pragma pack(push, 4)
struct my_struct
{
unsigned int a;
double b;
};
#pragma pack(pop)
如果没有这一点,通过单独的标题进行打包将导致混乱,当它添加到一个而不是另一个TU中时。您已经回答了自己的问题-您需要将相同的
pragma pack
应用于共享相同标题的所有模块-因此添加#包括“header1.h”
到header2.h。为什么不将header1.h
包含在header2.cpp
中?因为这样的原因,通常打包是在结构本身上方完成的,而不是将其分开。@legends2k不,我没有。这些是完全不同的独立项目。@PaulR header2.h不使用header1。h@Ivars:他所说的是,理想情况下应该使用它,因为您将相关实体放在不同的标题中,这是不正确的。因此,您可以编辑并使用它。或者将它们全部移动到一个文件中,然后使用它。欢迎使用。有关推送和弹出的详细信息,请参阅。
#pragma pack(push, 4)
struct my_struct
{
unsigned int a;
double b;
};
#pragma pack(pop)