問題タブ [variadic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
12 に答える
77846 参照

c - C で可変個引数関数の呼び出しを転送する

Cでは、可変関数の呼び出しを転送することは可能ですか? のように、

この場合、上記の方法で呼び出しを転送することは明らかに厳密には必要ではありません (他の方法で呼び出しをログに記録したり、vfprintf を使用したりすることができるため) が、私が取り組んでいるコードベースでは、ラッパーが実際の作業を行う必要があり、 vfprintf に似たヘルパー関数を持っていません (追加することもできません)。

[更新: これまでに提供された回答に基づいて、混乱が生じているようです。質問を別の言い方をすると、一般に、その関数の定義を変更せずに、任意の可変引数関数をラップできますか.]

0 投票する
6 に答える
213810 参照

c - 可変個引数マクロの作り方(引数の数が可変)

特定の数ではなく、任意の数のパラメーターを受け入れるマクロを C で作成したい

例:

X任意の数のパラメータ

whateverオーバーロードされており、2 つまたは 4 つのパラメーターで呼び出すことができるため、これが必要です。

マクロを 2 回定義しようとしましたが、2 回目の定義で最初の定義が上書きされました。

私が使用しているコンパイラは g++ (具体的には mingw) です。

0 投票する
3 に答える
441 参照

c - フォーマット文字列に基づくスマート可変個引数拡張

何かを書き込む場所を知るために構成ファイルを読み取るデーモンがあります。構成ファイルには、次のような行があります。

または、次のようになります。

...または単にこのように:

...または最後に:

プログラム内にcfg->pathfmtとしてその行があります。私が今やろうとしているのは、それを賢く使う方法を考え出すことです。

もう少し説明すると、パスにはフォーマットするコンポーネントを最大2つ含めることができます。%dはジョブID(int)として展開され、%sはジョブ名(string)として展開されます。ユーザーは、構成ファイルで1つ、両方、または何も使用したくない場合があります。最終的にsnprintf()に渡す前に、彼らが何をどのような順序で望んでいるかを知る必要があります。少し絞り込むことはできますが、strtok()と話したいので、醜いようです。

私はユーザーにこの種の柔軟性を提供したいのですが、それを実装するための賢明でポータブルな方法を探すことに迷っています。私はまた、これを探し始める方法について完全にそして完全に途方に暮れています。

次の場合はとても嬉しいです:

  • 誰かが私が良い例を見つけるために検索フレーズを絞り込むのを手伝ってくれるかもしれません
  • 誰かがこれを実装するOSSプロジェクトへのリンクを投稿する可能性があります
  • 誰かが疑似コードを投稿する可能性があります

私は自分のためにコードを書いてほしくありません。私は(私が思うに)非常に単純なものであるべきものに本当に固執していて、最初の一口を取るのに助けが必要です。当たり前のことを考えすぎて見落としているような気がします。

最終結果は、次のようなブール関数になります。

次に、j-> outpathでsnprintf()を(適切に)呼び出し、ある種のガベージ(つまり、%の後にs、d、または%以外のものが続く)が構成行(またはそのnull)にある場合はfalseを返します。健全性チェックは簡単です。フォーマットを正しくするための引数の数(および順序)を取得するのに少し時間がかかっています。

前もって感謝します。また、評判がよければ、このタイトルを自由に編集してください。私が言ったように、1行で質問する方法がよくわかりません。必要なのはパーサーだと思いますが、本格的なレクサー/パーサーを使用して1つの単純な文字列を処理するのは厄介です。

0 投票する
2 に答える
1413 参照

c# - 配列を必要とする可変個引数関数の設計上の決定はどのようなものでしたか?

私は興味があり、うまくいけば誰かがこれに光を当てることができます-しかし、なぜ「params」を取るC#関数は配列でなければならないのですか?

パラメータリストのオブジェクトが配列に入力されていることはわかりましたが、未定義の数の配列オブジェクトを受け取る可変引数関数を作成したい場合はどうすればよいでしょうか?

たとえば、この機能を...

非常に簡単ですが、さまざまな量の数値を受け取ることができます-たとえば...

ここで、さまざまな量の整数配列を取り、すべての数値を合計する関数を作成したいとします。私の知る限り、ボクシングを検討する必要があります...

これは次のように使用できます...

この背後にある理由は何でしたか? なぜこれが単一の非配列変数として実装されなかったのですか? のようなparams Int32

0 投票する
4 に答える
6561 参照

c - パラメータを可変個引数関数に動的に渡す

パラメータを可変引数関数に動的に渡す方法があるかどうか疑問に思っていました。つまり、関数がある場合

そして、ユーザーから一連の値を受け入れています。これらの値を関数に渡す方法が必要です。

これらすべての関数の異なるバージョンを書きたくありませんが、他に選択肢はないと思いますか?

0 投票する
9 に答える
62576 参照

c - 可変引数マクロで引数を反復処理することは可能ですか?

C99またはGCC拡張機能を使用して、可変引数マクロに渡された引数を反復処理できるかどうか疑問に思っていましたか?

たとえば、構造体とそのフィールドを引数として受け取り、構造体内の各フィールドのオフセットを出力する汎用マクロを作成することは可能ですか?

このようなもの:

0 投票する
5 に答える
1385 参照

c - プログラマーがCで安全で正しいprintf呼び出しを書くのを助ける方法は?

[明確にするために組織と内容を更新]

本当の質問

C にとって、プログラマーがタイピングしている間に、プロジェクト固有の printf のようなデバッグ関数への安全で正しい呼び出しを作成するのに役立つ良い方法は何でしょうか?

Cマクロ?C ラッパー関数? コード エディターのマクロまたはテンプレート? 他の?

背景に関する質問と回答

多くのソフトウェアは、問題が発生した場合のアドホックまたはデバッグ ログのいずれかで、デバッグに printf または printf に似た関数を使用します。それでも、エラーが発生しやすいです。

Q1: どのように私たちは知っていますか?
A1: スタティック アナライザーには、printf-mismatch エラーのカテゴリがあります。これはエラーの一般的なクラスです。これらのツールが C コードでこれらの警告を呼び出すのをよく目にします。

Q2: このエラーのサブクラスは何ですか?
A2: 主に、書式指定子の誤りと、書式指定子の数の誤りです。多くの場合、実際のエラーは逆です: 変数の型が間違っているか、出力する変数の数が間違っています。

Q3: なぜ気にするのですか?
A3: せいぜい、間違ったログ情報を引き起こし、デバッグを妨げます。最悪の場合、ソフトウェアがクラッシュします。

Q4: この問題について何かしようとした人はいますか?
A4: 確かに、(C++ などとは対照的に) C 用のものは見たことがありませんが、たとえば、次のようになります。

http://www.ddj.com/cpp/184401999?pgno=1 http://mi.eng.cam.ac.uk/~er258/cvd/tag/html/group__printf.html

これらの製品やその他の製品で私が欠けているのは、現在 C で書かれた製品を見ており、C の問題を解決する必要があるという事実に加えて、それらが事後の解決策であるということです。彼らはクラッシュを回避でき、何がうまくいかなかったのか、何かがうまくいかなかったという警告の説明を提供できます、プログラマーの意図が何であったかを推測することはできません (特に上記の Q&A #2 を参照)。

Q5: printf を使用するとエラーが発生しやすいのはなぜですか?
A5: printf 呼び出しを記述するには、プログラマーが変数の型と数、書式指定子、フリー テキスト文字列定数、および句読点 (これらはすべて互いに非常によく似ている) を 1 行に混在させる必要があるためです。

0 投票する
3 に答える
5032 参照

c++ - パラメーター パックに型が含まれているかどうかを確認する

可変個引数テンプレートのパラメーター パックに特定の型が含まれているかどうかを確認する組み込み機能が C++0x に用意されているかどうか疑問に思っていました。現在、適切な可変個引数テンプレートの代わりに boost::mpl::vector を使用している場合、boost:::mpl::contains を使用してこれを達成できます。ただし、コンパイル時間のオーバーヘッドが深刻です。C++0x には std::is_same に対するコンパイラ レベルのサポートがあると思います。そこで、以下のような一般化がコンパイラでもサポートされているかどうかを考えていました。

0 投票する
3 に答える
8815 参照

objective-c - Objective-C の受け渡し ... nil 終了引数リスト

...ObjectiveCの にいくつかの問題があります。

私は基本的にメソッドをラップしていて、nil終了したリストを受け入れて、同じリストをラップしているメソッドに直接渡したいと思っています。

これが私が持っているものですが、EXC_BAD_ACCESSクラッシュの原因になります。ローカル変数を調べると、渡されたときにotherButtonTitles単に a である場合に表示されますNSStringotherButtonTitles:@"Foo", nil]

nilまったく同じ終了リストを維持しながら、着信引数から発信引数に単純に吸い上げるにはどうすればよいですか?

0 投票する
4 に答える
4865 参照

c++ - 可変引数の C++ オーバーロード演算子コンマ

引数の演算子コンマをオーバーロードすることにより、関数の可変引数を構築することは可能ですか? 私はそうする方法の例を見たい..、おそらく次のようなもの: