Structトの再計算を通じてマクロの使いすぎ
-
16-09-2020 - |
質問
私の一部が構造体をinitialise、退屈なのです。きたらと思いマクロがったことは---でもなんなのか、 C プリプロセッサで十分です。
私が構造体を代表するメニューを取り揃えております。で構成されており、関数ポインタのみ:
typedef uint8_t (*button_handler) (uint8_t);
typedef void (*pedal_handler) (void);
typedef void (*display_handler) (void);
typedef void (*menu_switch_handler) (void);
#define ON_BUTTON(x) uint8_t menu_frame_##x##_button (uint8_t button)
#define ON_PEDAL(x) void menu_frame_##x##_pedal (void)
#define ON_DISPLAY(x) void menu_frame_##x##_display (void)
#define ON_SWITCH(x) void menu_frame_##x##_switch (void)
typedef struct menu_frame {
button_handler on_button;
pedal_handler on_pedal;
display_handler on_display;
menu_switch_handler on_switch;
} menu_frame;
でくの機能や分離の機能として.cファイル):
ON_BUTTON(blah) { ... }
メニューやし(.hファイル):
ON_BUTTON(blah);
ON_DISPLAY(blah);
menu_frame menu_frame_blah = {
menu_frame_blah_button,
NULL,
menu_frame_blah_display,
NULL
};
ができま倍のメニュー定義の一つの定義?私が何かを広げる MENU(blah, menu_frame_blah_button, NULL, menu_frame_blah_display, NULL)
もちろん、必要があります。:
- での短縮(NULLまたは一部名)
- 削除の必要とする
ON_BUTTON(...);
前から構造体
理想的にはたいと思い MENU(blah, button, NULL, display, NULL)
の両方を定義するハンドラのメニュー構造体そのものです。わからない例えば、どの防止に拡大し、入 ON_SWITCH(NULL)
.
かのアーティストやアートがあります。
解決
できない条件付きのマクロ展開でC、そのマクロを書い機種によって異なるというの引数として:利用できません#場合にはマクロ定義で設定します。
しないといけないのではないかいうようなものになっていくかも MENU(blah, ITEM(blah,button), NULL, ITEM(blah,display), NULL)
, まだ別のプロトタイプのが条件。
個人的には、書簡単なスクリプトを使用して生成することのような定型Cコードです。うお客様のご希望syntax.Pythonはあくまで自分に合った...
他のヒント
長々と書きましたPythonスクリプトをこのようなコードを用います。というルートで仕事のスクリプトへの御造ります。
プログラムすることが可能です条件分岐に、有限ループがデフォルトの引数は、すべての内のプリプロセッサです。ブ図書館の実装の一部とプリプロセッサです。Boostは、主にC++でのプリプロセッサものは基本的には仕事をしています。
などの技術に書き込みの複雑なマクロがャンプ場をご利用下さい。でカスタマーサポート/よく簡単に実装がC99の代わりにC89い名initializersと VA_ARGSがたいです。