C 带有Pragma Pack的错误值
c++ wrong values with pragma pack
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中添加时,通过单独的标头完成包装将导致混乱。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 条件变量和#pragma Pack错误
- 为什么我会收到错误"parameter pack 'F' must be at the end of the template parameter list"
- C 带有Pragma Pack的错误值
- 由于#Pragma Pack错误而导致的内存损坏 - std Map损坏 - 插入上崩溃
- 传递参数pack来替换stl函数会导致编译错误