Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;pragma包的值错误_C++_Struct_Pragma_Memory Alignment_Pack - Fatal编程技术网

C++ c++;pragma包的值错误

C++ 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 <<

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 << '\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)