• 締切済み

任意の数の引数をとる関数

gccでprintfのように、任意の数の引数をとる関数を作りたいのですが、MS-VCでは hoge(arg1, arg2, ...) という書式のようですが、gccではエラーでした。 どうすればいいのでしょうか?

みんなの回答

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

 関数の定義自体は、stdarg.hをインクルードしなくても出来ますよ。 (可変長引数のプロトタイプは、ANSI C準拠の処理系ならば、どこでも使えるはずですが。)  ちなみに下記のコードでテストしてみたところ、問題なく動作しました。 (gccのバージョンは2.95.2でした) #include <stdio.h> void arg(int n, ... ); int main(void) {   arg(5, 1,5,3,4,7);   return 0; } void arg(int n, ... ) {   int *p = &n;   int i;   for (i = 0; i < n; i++)     printf("%d\n", *++p); } # 引数の渡され方が分かっていれば、stdarg.hがなくても処理できます。

haporun
質問者

お礼

うーむ、構文は間違ってないと思うのですが。 もういちど調べてみます。

すると、全ての回答が全文表示されます。
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

#include <stdio.h> #include <stdarg.h> int func(int, ...) ; int main(void) {  func(1, "a") ;  func(2, "a", "ab") ;  func(3, "a", "ab", "abc") ;  return (0) ; } int func(int num, ...) {  char *pp ;  int cc ;  va_list ll ;  va_start(ll, num) ;  for (cc = 0 ; cc < num ; cc++) {   pp = va_arg(ll, char *) ;   printf("%3d:\"%s\"\n", cc, pp) ;  }  va_end(ll) ;  return (cc) ; } egcs2.91.57(CygWin32上)ではオッケーでした。 MSVC++でもstdargはサポートされています。

haporun
質問者

補足

stdarg.hをインクルードしなければ、関数の定義ができないのでしょうか? 使い方はとりあえずわかっているので。

すると、全ての回答が全文表示されます。
noname#9414
noname#9414
回答No.1

someFunction(LPSTR lpszFormat, ...) とすれば使えるはずです。 使い方は、ご自分で探してください。 TRACEマクロなどをソースから探せば使い方が 分かると思いますよ。 ではでは☆

haporun
質問者

補足

それが、どうもそこ構文でエラーになってしまいます。 バージョンが低いのかな?

すると、全ての回答が全文表示されます。

関連するQ&A