1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#pragma pack(1)
typedef struct {
char label; // on our platform, sizeof(char) == 1
int x; // on our platform, sizeof(int) == 4
int y; // " " " " " "
} Point;
typedef union {
int as_int; // on our platform, sizeof(int) == 4
char* as_string; // on our platform, sizeof(▒▒*) == 8
} IntOrString; // on our platform, sizeof(IntOrString) == 8
// --- max of the sizes of each element in the union
int main(int argc, char* argv[]) {
int n = 5;
printf("sizeof(n) == %zd\n", sizeof(n));
printf("sizeof(int) == %zd\n", sizeof(int)); // don't use sizeof(TYPE)
printf("sizeof n == %zd\n", sizeof n);
//printf("sizeof int == %zd\n", sizeof int); // error: expected expression before ‘int’
Point p = { .label = 'A', .x = 5, .y = 7 };
printf("sizeof(p) == %zd\n", sizeof(p)); // 9 bytes .... but only with #pragma pack(1)
IntOrString int_or_string = { .as_int = 4 };
printf("sizeof(int_or_string) == %zd\n", sizeof(int_or_string));
int_or_string = (IntOrString) { .as_string = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" };
printf("sizeof(int_or_string) == %zd\n", sizeof(int_or_string));
return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */
|
© Copyright 2022 Alexander J. Quinn This content is protected and may not be shared, uploaded, or distributed.