問題タブ [x-macros]
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.
c - x-macro 条件付きエラー - 数値比較
X(a, b)
すべての場所でX マクロのコンパイル時エラーを生成したいa > b
したがって、エラーを生成しますX(30, 20)
これはCで可能ですか?
編集: 使用例 私にとって、左の数字はたとえば大きな構造体の sizeof であり、右の数字はこの構造体を格納するための固定スペースです。構造体が利用可能なスペースよりも大きい場合、コンパイラでエラーを生成する必要があります。
c - X マクロの複数のトークンを連結する
X マクロとプリプロセッサ連結を初めて一緒に使用しようとしています。
プリプロセッサの連結に関連するSOに関する他の多くの質問を読みましたが、まだそれらに頭を悩ませたり、ユースケースにそれらを適応させる方法を理解することができませんでした。
アイテムのリストは、一連の の ID 番号のリストです。次のstructs
ようになります。
次のように構造体を宣言できます。
ここで、各構造体のメンバーの 1 つを ID 番号と等しくなるように初期化したいと思いますfoo_n.id = n;
。以下を使用して、最初のトークン連結を達成できました。
しかし、割り当てられた値も置き換えられるように、アイデアをさらに正しく拡張する方法を理解できませんでした。私が試してみました:
また、連結に二重間接化を使用するさまざまな試み。しかし、成功していません。上記の試みにより、 内の各項目について次のようなエラーが発生しましたLIST_OF_ID_NUMS
。
どうすればフォームを達成できfoo_n.id = n
ますか?
c - 前の値に基づく X マクロ列挙
X-Macro で列挙型を生成したい。列挙型は、前のサイズに基づいて増加する必要があります。
私はこれを持っています
これを生成したい
しかし、これは機能しません
これは機能しますが、もっと簡単にできると思います
c - 連結パラメーターを使用した X-Macro
X-Macro を使用して、次のコードを使用して列挙を作成しています
これをもう少し一般化して、X-Macro テーブルに 4 つのパラメータしか持たないようにしたいと思います。最初のパラメーターは一般/基本名で、追加のパラメーターと連結します。私はマクロを次のように定義しました。これは、今示したコードを達成しようとしています。
コンパイラから次のエラー メッセージが表示されます。
エラー: '(' トークンの前に識別子が必要です
だから、私の問題は "EXPAND_NAME(a, WA) = b," 式にあるようです。私はいくつかの異なるアプローチを試しましたが、今のところうまくいきません。最後に、理想的には、ここのコードのように「WA」、「WB」、「WC」を 2 回指定するのではなく、1 回だけ指定したいと思います。
同様の質問、Concatenate multiple tokens for X macro を見つけましたが、可能であればやりたいことではありません。私が間違っていることへの洞察は大歓迎です。ありがとう。
編集:コピー/貼り付けエラーが含まれていたため、最初の X-Macro 定義を修正しました