2015年5月3日日曜日

開発環境

Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の7章(高度な関数: 関数を最大限に活用する)、エクササイズ(p.347))を解いてみる。

その他参考書籍

エクササイズ(p.347))

コード(BBEdit, Emacs)

#include <stdio.h>
#include <stdarg.h>

typedef enum { MUDSLIDE, FUZZY_NAVEL, MONKEY_GLAND, ZOMBIE } drink;

double price(drink d) {
  switch (d) {
  case MUDSLIDE:
    return 6.79;
  case FUZZY_NAVEL:
    return 5.31;
  case MONKEY_GLAND:
    return 4.82;
  case ZOMBIE:
    return 5.89;
  default:
    return 0;
  }
}
#define Total(name, ...)                                                       \
  double name##_total = 0;                                                     \
  int *name##_list = (int[]){__VA_ARGS__, -1};                                 \
  for (size_t name##_len = 0; name##_list[name##_len] != -1; name##_len++)     \
    name##_total += price(name##_list[name##_len]);

int main() {
  Total(prices, MONKEY_GLAND, MUDSLIDE, FUZZY_NAVEL);
  printf("価格は%.2fです\n", prices_total);
}

入出力結果(Terminal)

$ crun.sh sample347_1
clang ...
価格は16.92です
$

0 コメント:

コメントを投稿