重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (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がなくても処理できます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/06 12:07

#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はサポートされています。

この回答への補足

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

補足日時:2001/07/02 15:50
    • good
    • 0

someFunction(LPSTR lpszFormat, ...)


とすれば使えるはずです。

使い方は、ご自分で探してください。
TRACEマクロなどをソースから探せば使い方が
分かると思いますよ。

ではでは☆

この回答への補足

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

補足日時:2001/07/02 15:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!