C - 構造体、共用体、ビットフィールド - 独自の構造を使う - キャスト
Head First C ―頭とからだで覚えるCの基本、 David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の5章(構造体、共用体、ビットフィールド - 独自の構造を使う - 分割して構築する)、p.251(コンパイラになってみよう)の解答を求めてみる。
Makefile
all: main.c
cc main.c && ./a.out
コード
main.c
#include <stdio.h>
typedef union
{
float lemon;
int lime_pieces;
} lemon_lime;
typedef struct
{
float tequila;
float cointreau;
lemon_lime citrus;
} margarita;
int main()
{
margarita m1 = {2.0, 1.0, {0.5}};
printf("%2.1f単位のテキーラ\n%2.1f単位のコアントロー\n%2.1f単位のジュース\n\n",
m1.tequila, m1.cointreau, m1.citrus.lemon);
// margarita m2;
// m2 = {2.0, 1.0, {0.5}};
margarita m2;
m2 = (margarita){2.0, 1.0, {0.5}};
printf("%2.1f単位のテキーラ\n%2.1f単位のコアントロー\n%2.1f単位のジュース\n\n",
m2.tequila, m2.cointreau, m2.citrus.lemon);
}
入出力結果(Terminal, Zsh)
% make
cc main.c && ./a.out
2.0単位のテキーラ
1.0単位のコアントロー
0.5単位のジュース
2.0単位のテキーラ
1.0単位のコアントロー
0.5単位のジュース
%