#pragma pack(n)
Abschlussbedingungen
Die Präprozessor-Direktive "#pragma pack( n )" erlaubt es, das Alignmnet von Strukturen zu beeinflussen. Somit lassen sich Strukturen erstellen, deren Felder nicht korrekt ausgerichtet sind. Das "n" steht dabei für das gewünschte Alignment.
Ein n von 1 erzeugt eine Struktur ohne Padding-Bytes. Alle Felder folgen direkt aufeinander. Bei n > 1 gilt: An stellen wo ein bestimmtes Alignment eingehalten werden muss, werden maximal n -1 Padding-Bytes erzeugt.
Wichtig: Hier am Institut PAES soll aller Code ohne #pragma pack( n ) auskommen! Wenn ihr diese Methode verwendet, dann müsst ihr einen verdammt guten Grund haben!
#include <stdalign.h>
#include <stdio.h>
#pragma pack(1)
struct my_first_type {
short int x;
unsigned int y;
};
#pragma pack(1)
struct my_second_type {
unsigned int y;
short int x;
};
int main()
{
struct my_first_type one;
struct my_second_type two;
printf("addresses: struct=%p - x=%p, y=%p\n", &one, &one.x, &one.y);
printf("sizeof(struct my_first_type) : %zd\n", sizeof(struct my_first_type));
printf("alignof(struct my_first_type): %zd\n", alignof(struct my_first_type));
printf("addresses: struct=%p - x=%p, y=%p\n", &two, &two.x, &two.y);
printf("sizeof(struct my_second_type) : %zd\n", sizeof(struct my_second_type));
printf("alignof(struct my_second_type): %zd\n", alignof(struct my_second_type));
return 0;
}
Zuletzt geändert: Freitag, 18. Mai 2018, 17:23