header1.hс ++ неправильных значений с прагмой пакетом
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';
}
м ain.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 видит my_struct
по-разному. Похоже, что это около #pragma pack(4)
, которое определено в header1.h. Почему это влияет на header2.h и main.cpp, но не на header2.cpp?
выход
12 4.56
12 4.56
16 -9.25596e+061
Вы уже ответили на свой вопрос - вам нужно применить тот же самый пакет «прагма» ко всем модулям, которые используют одни и те же заголовки, поэтому добавьте '#include 'header1.h" 'в header2.h. –
Почему вы не включаете 'header1.h' в' header2.cpp'? По таким причинам обычно упаковка выполняется непосредственно над самой структурой, а не раздельно. – legends2k
@ легенды2k нет, я не знаю. это совершенно разные автономные проекты. – Ivars