2017年12月16日土曜日

開発環境

Head First C ―頭とからだで覚えるCの基本 (David Griffiths (著)、Dawn Griffiths (著)、中田 秀基 (監修)、木下 哲也 (翻訳)、オライリージャパン)の5章(構造体、共用体、ビットフィールド - 独自の構造を使う)、混乱したミキサー(p. 250)を取り組んでみる。

以前、Visual Studioのコンパイラーは構造体や共用体で指示付き初期化子が非対応でドット演算子で代替したけど、Visual Studio Installer の変更、右側の概要で、Clang/C2(試験的)というのを発見。

なので、早速チェックしてインストール、構成マネージャーで変更してみたら、構造体とか共用体で指示付き初期化子が使えるかも。(他にもc99、c11の機能が使えるようになってるかも。Visual Studio で使えるの快適で楽しみ。ただ、その代わりに使えない機能とかもあるのかも。)

ということで、コードを修正して実行してみることに。

混乱したミキサー(p. 250)

コード

#include <stdio.h>
#include <stdlib.h> // system

typedef union
{
 float lemon;
 int lime_pieces;
} LemonLime;

typedef struct
{
 float tequila;
 float cointreau;
 LemonLime citrus;
} Margarita;

int main()
{
 /*エラーにならない */
 Margarita m1 = { 2.0, 1.0,.citrus.lemon = 2 };

 /*
 Margarita m1 = { 2.0, 1.0 };
 m1.citrus.lemon = 2;
 */
 printf("%2.1f単位のテキーラ\n%2.1f単位のコアントロー\n%2.1f単位のジュース\n",
  m1.tequila, m1.cointreau, m1.citrus.lemon);
 puts("");

 Margarita m2 = { 2.0, 1.0,{ 0.5 } };
 printf("%2.1f単位のテキーラ\n%2.1f単位のコアントロー\n%2.1f単位のジュース\n",
  m2.tequila, m2.cointreau, m2.citrus.lemon);
 puts("");

 Margarita m3 = { 2.0, 1.0, .citrus.lime_pieces = 1 };
 /*
 m3.citrus.lime_pieces = 1;
 */
 printf("%2.1f単位のテキーラ\n%2.1f単位のコアントロー\n%i切れのライム\n",
  m3.tequila, m3.cointreau, m3.citrus.lime_pieces);
 puts("");

 system("pause");
 return 0;
}

入出力結果(コマンドプロンプト)

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

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

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

続行するには何かキーを押してください . . .

これで、Visual Studio でも指示付き初期化子とか使えるようになった。

0 コメント:

コメントを投稿