計算機科学のブログ

ほしい物リスト

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単位のジュース

%