-
Notifications
You must be signed in to change notification settings - Fork 0
/
syntax_8_structs.c
58 lines (44 loc) · 1.01 KB
/
syntax_8_structs.c
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>
typedef enum {
hearts,
clubs,
spades,
diamonds
} Suit;
typedef struct Card Card;
struct Card {
Suit suit;
int value;
};
Card fakeMagicTrick_byValue(Card c){
Card result = {hearts, c.value};
return result;
/// Alternatives:
// "Compound Literal"
/*
return (Card){hearts, c.value};
*/
// "Designated initializer"
/*
return (Card){
.value = c.value;
.suit = hearts
}
*/
}
void fakeMagicTrick_byReference(Card* c){
c->suit = hearts;
/// Alternative:
// The above is "syntactic sugar" for this:
/*
(*c).suit = hearts;
*/
}
int main(){
Card c = {spades, 5};
Card d = fakeMagicTrick_byValue(c);
printf("c = Card(%d, %d) (expected: Card(2, 5))\n", c.suit, c.value);
printf("d = Card(%d, %d) (expected: Card(0, 5))\n", d.suit, d.value);
fakeMagicTrick_byReference(&c);
printf("c = Card(%d, %d) (expected: Card(0, 5))\n", c.suit, c.value);
}