C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 可変長引数について


(過去ログ 67 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■39072 / inTopicNo.1)  可変長引数について
  
□投稿者/ アキナベ (1回)-(2009/07/29(Wed) 23:35:50)

分類:[C/C++] 

初めましてアキナベと申します。
可変長引数について質問させていただきます。
ご教授お願いいたします。

■質問
可変長引数に文字列と数値が混在していた場合、エラーを起こさずに処理を正常に実行させることは可能でしょうか?
また可変長引数の個数を取得できるものなのでしょうか?
(↓の例のように、numで可変長引数の数を指定しないようにしたいと考えております。)

(例)
int main(void)
{
func(3, 50, "test", 10 );//50の場所に"文字列"が入る可能性もあります

return 0;
}
void func(int num, ...)
{
//可変長引数を一つの文字列にまとめる
/⇒上記の引数が渡された場合は、"50test10"の文字列になる
}


引用返信 編集キー/
■39079 / inTopicNo.2)  Re[1]: 可変長引数について
□投稿者/ επιστημη (2069回)-(2009/07/30(Thu) 01:21:23)
επιστημη さんの Web サイト
> 可変長引数に文字列と数値が混在していた場合、エラーを起こさずに処理を正常に実行させることは可能でしょうか?
> また可変長引数の個数を取得できるものなのでしょうか?

ちと難しそうですねぇ。
引数の型と数をチェックしないのが可変長引数なので。

引用返信 編集キー/
■39082 / inTopicNo.3)  Re[1]: 可変長引数について
□投稿者/ .SHO (978回)-(2009/07/30(Thu) 08:17:04)
> 可変長引数に文字列と数値が混在していた場合、エラーを起こさずに処理を正常に実行させることは可能でしょうか?
> また可変長引数の個数を取得できるものなのでしょうか?

その場合は、最初の引数で、その後に続く引数の種別が判断できるように実装します。
printf() の実装を参考にしてください。

引用返信 編集キー/
■39085 / inTopicNo.4)  Re[2]: 可変長引数について
□投稿者/ επιστημη (2070回)-(2009/07/30(Thu) 08:43:00)
επιστημη さんの Web サイト
No39082 (.SHO さん) に返信
>>可変長引数に文字列と数値が混在していた場合、エラーを起こさずに処理を正常に実行させることは可能でしょうか?
>>また可変長引数の個数を取得できるものなのでしょうか?
>
> その場合は、最初の引数で、その後に続く引数の種別が判断できるように実装します。
> printf() の実装を参考にしてください。

↓なんてな「ただしがき」があるので、"そのテは却下"ぢゃねえでしょか。
   # printfのformat-str.は型と数を指定しますから。

(↓の例のように、numで可変長引数の数を指定しないようにしたいと考えております。)
...
void func(int num, ...)


引用返信 編集キー/
■39087 / inTopicNo.5)  Re[3]: 可変長引数について
□投稿者/ .SHO (981回)-(2009/07/30(Thu) 08:53:13)
> ↓なんてな「ただしがき」があるので、"そのテは却下"ぢゃねえでしょか。
>    # printfのformat-str.は型と数を指定しますから。
>
> (↓の例のように、numで可変長引数の数を指定しないようにしたいと考えております。)
> ...
> void func(int num, ...)

そっか、そっか、なるほどね。
じゃぁ、無理ですね。

扱う数値が、最初のバイトを使用しない(大きな値を使用しない)という前提条件が許されるなら
とりあえず数値として取得してみれば判断できそうですが。
まぁ、負の値を考慮する必要があるのと、空の文字列は扱えないのと、なにより気持ち悪い実装ですが…
引用返信 編集キー/
■39089 / inTopicNo.6)  Re[4]: 可変長引数について
□投稿者/ .SHO (982回)-(2009/07/30(Thu) 08:58:48)
> 扱う数値が、最初のバイトを使用しない(大きな値を使用しない)という前提条件が許されるなら
> とりあえず数値として取得してみれば判断できそうですが。
> まぁ、負の値を考慮する必要があるのと、空の文字列は扱えないのと、なにより気持ち悪い実装ですが…

ごめんなさい。これも却下。
文字列はポインタが渡されるから、やっぱ無理。
引用返信 編集キー/
■39135 / inTopicNo.7)  Re[5]: 可変長引数について
□投稿者/ ふくちゃん (39回)-(2009/07/30(Thu) 16:25:12)
ちなみにC? C++?
僕は下のように作っていますよ。

CString numToText(int num)
{
CString str;
str.Format("%d",num);
return str;
}

int main(void)
{
func(3, numToText(50), "test", numToText(10) );//50の場所に"文字列"が入る可能性もあります

return 0;
}
void func(int num, ...)
{
//可変長引数を一つの文字列にまとめる
/⇒上記の引数が渡された場合は、"50test10"の文字列になる
}

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -