C 带有Pragma Pack的错误值

c++ wrong values with pragma pack

本文关键字:错误 Pack 带有 Pragma      更新时间:2023-10-16

header1.h

#pragma pack(4)

header2.h

#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.cpp

#include "header2.h"
void show_cpp(my_struct* my_struct_ptr)
{
  std::cout << sizeof(my_struct) << 't' << my_struct_ptr->b << 'n';
}

main.cpp

#include "header1.h"
#include "header2.h"
#include <iostream>
int main()
{
  my_struct my_struct;
  my_struct.b = 4.56;
  std::cout << sizeof(my_struct) << 't' << my_struct.b << 'n';
  show_h(&my_struct);
  show_cpp(&my_struct);
  return 0;
}

main.cpp,header2.h和header2.cpp的看法不同。似乎是关于#pragma pack(4)的,该CC_2在header1.h中定义。为什么它会影响header2.h和main.cpp而不是header2.cpp?

输出

12 4.56
12 4.56
16 -9.25596e+061

摆脱 header1.h和do

#pragma pack(push, 4)
struct my_struct
{
  unsigned int a;
  double b;
};
#pragma pack(pop)

没有此事,当在一个tu中添加时,通过单独的标头完成包装将导致混乱。