@pixik

В чем разница между #pragma pack(1) и #pragma pack(push, 1)?

Добрый день!
Встретил в коде такую строку:
#pragma pack(push, 1)
Попробовал скомпилировать с push и без, результат одинаковый. Подскажите пожалуйста, если есть разница, то в чем?
Вот пример:
#include <iostream>
using namespace std;


typedef struct{
	int a = 1;
	char b = 'x';
	long c = 0;
} A;

#pragma pack(push, 1)
typedef struct{
	int a = 1;
	char b = 'x';
	long c = 0;
} B;

#pragma pack(2)
typedef struct{
	int a = 1;
	char b = 'x';
	long c = 0;
} C;
#pragma pack(push, 2)
typedef struct{
	int a = 1;
	char b = 'x';
	long c = 0;
} D;

int main() {
	// your code goes here
	A a;
	B b;
	C c;
	D d;
	cout << "A = " << sizeof(a) << endl;
	cout << "B = " << sizeof(b) << endl;
	cout << "C = " << sizeof(c) << endl;
	cout << "D = " << sizeof(d) << endl;
	return 0;
}

и вывод:
A = 12
B = 9
C = 10
D = 10
  • Вопрос задан
  • 7151 просмотр
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
push заносит текущее значение на вершину стека, затем его можно восстановить по #pragma pack(pop).
Это позволяет исключить конфликты при сборке нескольких .h-файлов с разными требованиями к pack.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы