2

まず、混乱を避けるために実際の名前を一般的な名前に切り替えたコードを次に示します。

/* Get the list of Hotkey commands */
#define A_COMMANDS_MACRO(a, b, c, d) a = b ,
enum {
#include "commandsFile.def"
} ;
#undef  A_COMMANDS_MACRO

これは、 Cプログラミング言語の複雑さに慣れる方法としてフォークを検討し、検討しているソース コードの一部です。したがって、訓練を受けていない私の目には、これは何もしていないように見えます。私の脳には、何かを定義してからすぐに定義を解除すると、互いに相殺されるように見えます。

明らかに、私は自分が間違っていることに気づきます。しかし、なぜ私は間違っているのですか?

4

3 に答える 3

5

「commandsFile.def」ファイルは、おそらく内部のどこかで「A_COMMANDS_MACRO」マクロを使用しています。

「#include」は基本的にインクルード ファイルをインクルード ファイルに貼り付けるため、「commandsFile.def」が処理されるときも #define は有効であることに注意してください。

于 2010-12-18T16:29:37.307 に答える
4

commandsFile.defには多くの行が含まれている必要があります。

A_COMMANDS_MACRO(A_COMMAND, 10, na, na)
A_COMMANDS_MACRO(OTHER_COMMAND, 23, na, na)

コードが使用可能なコマンドとそのコードを含む列挙型を作成するようにします。

この .def ファイルが他の言語で記述されたプログラムで使用される場合に役立つ可能性があるため、テキスト解析を実装する代わりに、C プリプロセッサを使用してこれを行います。

于 2010-12-18T16:33:05.707 に答える
4

そこに表示されるものは、通常 X-MACRO と呼ばれます。この手法は、 を介してマクロを定義し#define、それらを使用するファイルを でインクルードすることで構成されます#include

非常に単純な例として、次の形式で 2 つの関数を宣言するヘッダー ( myheader.hなど) を作成できます。

int foo(MYTYPE a, MYTYPE_PTR b);
void bar(MYTYPE a, MYTYPE_PTR b);

そして、あなたのコードで:

#define MYTYPE int
#define MYTYPE_PTR int*
#include "myheader.h"
#undef MYTYPE
#undef MYTYPE_PTR

s は、#undefインクルード ファイルにも含まれている場合があります。

詳細については、このウィキペディアのリンクをご覧ください。

于 2010-12-18T16:39:31.147 に答える