計算機科学のブログ

C - 構造体、共用体、ビットフィールド - 独自の構造を使う - 指示付き初期化子

Head First C ―頭とからだで覚えるCの基本David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の 5章(構造体、共用体、ビットフィールド - 独自の構造を使う)、p.250(混乱したミキサー)の解答を求めてみる。

Makefile

main: 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 m = {2.0, 1.0, .citrus.lemon = 2};
    printf("%2.1f単位のテキーラ\n%2.1f単位のコアントロー\n%2.1f単位のジュース\n\n",
           m.tequila, m.cointreau, m.citrus.lemon);
    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 = {2.0, 1.0, {.lime_pieces = 1}};
    printf("%2.1f単位のテキーラ\n%2.1f単位のコアントロー\n%i切れのライム\n\n",
           m2.tequila, m2.cointreau, m2.citrus.lime_pieces);
}

入出力結果(Terminal, Zsh)

% make
cc main.c && ./a.out
2.0単位のテキーラ
1.0単位のコアントロー
2.0単位のジュース

2.0単位のテキーラ
1.0単位のコアントロー
0.5単位のジュース

2.0単位のテキーラ
1.0単位のコアントロー
1切れのライム

%