C - 高度な関数 - 関数を最大限に活用する - 可変個引数
Head First C ―頭とからだで覚えるCの基本、 David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の7章(高度な関数 - 関数を最大限に活用する)、p.347(エクササイズ)の解答を求めてみる。
Makefile
all: main.c
cc main.c && ./a.out
コード
main.c
#include <stdio.h>
#include <stdarg.h>
typedef enum
{
MUDSLIDE,
PUZZY_NAVEL,
MONKEY_GLAND,
ZOMBIE
} drink;
double price(drink d)
{
switch (d)
{
case MUDSLIDE:
return 6.79;
case PUZZY_NAVEL:
return 5.31;
case MONKEY_GLAND:
return 4.82;
case ZOMBIE:
return 5.89;
}
}
double total(int args, ...)
{
double total = 0;
va_list ap;
va_start(ap, args);
for (size_t i = 0; i < args; i++)
{
total += price(va_arg(ap, double));
}
va_end(ap);
return total;
}
int main()
{
printf("価格は%.2fです。\n",
total(3, MONKEY_GLAND, MUDSLIDE, PUZZY_NAVEL));
}
入出力結果(Terminal, Zsh)
% make
cc main.c && ./a.out
価格は20.37です。
%