掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7708

main関数で受け取ったコマンドライン引数を、可変長引数を持つ関数へ渡すには
投稿者---卵黄(2007/07/23 23:24:56)


お手数をおかけしますが、よろしくお願いします。

環境は以下の通りです。
OS :fedora core4
コンパイラ:gcc4.0

main関数で受け取ったコマンドライン引数を
1要素毎に分割し、可変引数を持つ関数に渡してやりたいと思っています。


以下にコマンドライン引数を4つ指定した際のイメージを書きます。

./Main value1 value2 value3 value4  ←Linux上での呼び出しイメージ

-----------------------------------------------------------------

void hogehoge (int cnt , ...); ←プロトタイプ宣言イメージ
int main(argc , *args[]){

    (argc数を基にargsの要素を分割する)    

    hogehoge(int argc , args[1],args[2],args[3],args[4]) ←関数の呼び出しイメージ

           :

}

-----------------------------------------------------------------

コマンドライン引数の数は可変となります。
hogehoge自身の改修は、現状複数の箇所で呼び出されているため難しいです。
このような状況を解決できる手法を知っている方が居ましたら、ご教授ください


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:main関数で受け取ったコマンドライン引数を、可変長引数を持つ関数へ渡すには 7709 RAPT 2007/07/24 00:44:10


No.7709

Re:main関数で受け取ったコマンドライン引数を、可変長引数を持つ関数へ渡すには
投稿者---RAPT(2007/07/24 00:44:10)
http://rapt21.com


hogehoge がいったい何をやっているのかにもよるが、考えられる方法をいくつか。
1.switch-case 文で、想定しうるだけの引数の数の case を書く。
2.for 文で hogehoge を引数1つで複数回呼ぶ。
3.hogehoge2 なり、ラッパ関数なりを作って配列を受け取れるようにする。



この投稿にコメントする

削除パスワード

No.7710

Re:main関数で受け取ったコマンドライン引数を、可変長引数を持つ関数へ渡すには
投稿者---えび(2007/07/24 01:16:48)


void hogehoge(argc , *args[]);
で良いのでは?



この投稿にコメントする

削除パスワード

No.7711

Re:main関数で受け取ったコマンドライン引数を、可変長引数を持つ関数へ渡すには
投稿者---yoh2(2007/07/24 02:25:17)


hogehogeの改修ができない理由が、

> hogehoge自身の改修は、現状複数の箇所で呼び出されているため難しいです。

というものだけなら、

> 3.hogehoge2 なり、ラッパ関数なりを作って配列を受け取れるようにする。

の派生案として、hogehgeの方をラッパ関数にしてしまうというのはいかがでしょう?
つまり、配列を受けとり、hogehogeと同等の動作をするhogehoge2を作り、
hogehogeは、hogehoge2を呼び出すように変更するわけです。
で、mainではhogehoge2を呼び出し、その他の部分では今までと同様、
hogehogeを呼び出す、と。

可変長引数を取る関数をラップする、配列を取る関数を作るのは処理系を狙い
撃たないと無理っぽいですが、逆なら標準Cの範囲内でできますから。


この投稿にコメントする

削除パスワード

No.7712

Re:main関数で受け取ったコマンドライン引数を、可変長引数を持つ関数へ渡すには
投稿者---卵黄(2007/07/24 02:47:07)


PARTさん、えびさん、yoh2さん
皆さん、アドバイスありがとうございます。
やはりCでは、mainで受け取ったコマンドライン引数を、直に関数に分割して渡すことはできそうにないみたいですね・・・
10〜20個くらいの引数をかき集めてログを吐く関数なので、switchとかifでは、ちょっとだるそうです。
今回だとラップしてやるのがベストな選択肢だと判断させていただきました。
皆さん、ありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ