タグ

C言語と可変長引数に関するdrupaのブックマーク (2)

  • 可変長引数 - Wikipedia

    可変長引数(かへんちょうひきすう、英: variable length arguments、variadic arguments)とはプログラミング言語において、関数(サブルーチンやメソッドを含む)やマクロの引数が固定ではなく任意の個数となっている引数のことである。 可変引数、可変個引数とも呼ばれる。 可変長引数を持つ関数を可変長引数関数(英: variadic function)と言う。 いくつかの言語では型安全が保証されなくなるので注意が必要である。 手法[編集] 可変長引数を取る手続きあるいは関数やメソッドは、多くのコンピュータプログラミング言語でサポートされている。 C言語 - 標準Cライブラリに用意されているstdarg.h(英語版)を使う。仮引数に型の指定は特に行わない。 C# - 配列型の仮引数の直前にparamsキーワードを指定する。 Java - 仮引数の型名と仮引数名の

  • C言語で可変長引数をとる関数を、型安全に書く方法

    C言語の可変長引数は、型安全でない(まちがった型の引数を渡してもコンパイルエラーにならない)とされています。これは言語仕様の理解としては正しいのですが、特定の型の引数を任意の個数とる関数に限っては、マクロを使うことで型安全性を確保することができます。 任意の個数のdoubleを引数にとり、その和を返す関数「sumf」を例にあげて説明します。 C言語の可変長引数機構を使ってsumfを定義すると、以下のようになります。 #include <math.h> #include <stdarg.h> #include <stdio.h> static double sumf(double nfirst, ...) { double r = 0, n; va_list args; va_start(args, nfirst); for (n = nfirst; ! isnan(n); n = va_a

  • 1