2017-04-19 20 views
0

私はC(here)で記述されたファイルを読み、理解しようと多くのCを知らない(あるいは、それはそもそもC++の場合)、私は以下の方法を思ったんだけどよ:C/C++マクロの引数は暗黙的にどのように扱われますか?

#define BEGIN yy_start = 1 + 2 * 

呼び出されたときこのように:

BEGIN(new_state) 

が動作しています。私はBEGINがマクロ/プレースホルダ設定yy_startであることを知っています。しかし、私は引数がどのように処理され、何かを見つけることができませんoperandsどこでも私を取得しないでください。

質問:明示的に処理されない場合、C/C++マクロで引数はどのように処理されますか?

+0

これはC言語で、ファイル拡張子(C++では* .cppが使用されます)で認識できます。 – Toby

+4

これはちょうど 'yy_start = 1 + 2 *(new_state)'に解決されますか?それは単に乗算ですか? –

+0

ああ、私は参照してください。明確化のためにありがとう。答えることができますか?それから私はチェックします。 – frequent

答えて

5

マクロは、結果として得られるコードは、それが前処理で行われる

yy_start = 1 + 2 *(new_state) 

であろうように、引数を持たないBEGIN。

11

明示的に処理されない場合、C/C++マクロで引数はどのように処理されますか?

マクロが引数で宣言されていない場合は、引数をまったくとりません。実際、Cは引数を受け入れるマクロとそうでないマクロを明示的に区別します。あなたの特定のケースでは、オブジェクトのようなマクロとしてBEGINの定義を与えられた:

yy_start = 1 + 2 *(new_state) 

#define BEGIN yy_start = 1 + 2 * 

この呼び出し...

BEGIN(new_state) 

は...に展開されます。特に、マクロ名だけが置き換えられることに注意してください。それに続くカッコで囲まれたトークンは、マクロ呼び出しの一部ではなく、マクロ展開の影響を受けません。

関連する問題