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 39 | #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
struct Point {
int x;
int y;
char* name;
};
void print_point(char* label, struct Point p) {
printf("%s: x== %d y == %d name == \"%s\"\n", label, p.x, p.y, p.name);
}
int main(int argc, char* argv[]) {
struct Point p = { .name = "ARMS 1010", .x = 10, .y = 10 };
// └─────────────────┬─────────────────────┘
// named initializer
print_point("before", p);
p = (struct Point*) { .name = "BHEE 170", .x = 1, .y = 70 };
// └────────────────────────────┬───────────────────────┘
// compound literal
//
// CAUTION: type of a compound literal will never have a '*'.
// p = (struct Point*) { .name = "BHEE 170", .x = 1, .y = 70 };
// ▲
// do not try to use an address type here
//
// GCC ERRORS: "field name not in record or union initializer"
// "initialization of 'struct Point *' from incompatible … type 'char *'"
//
print_point("after ", p);
return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */
|
© Copyright 2024 Alexander J. Quinn This content is protected and may not be shared, uploaded, or distributed.