質問

私の一部が構造体を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がたいです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top