1

#NAME や ##NAME のようなもの。彼らはCで何を意味しますか? マクロに関する GCC ドキュメントでそれらを見ました。

4

4 に答える 4

1

演算子##は、2つの引数を連結し、それらの間に空白を残しません。

 #define printe(a,b) a ## b
   printe(c,out) << "testing";

出力は:テスト

単一の#は、次のような文字列パラメータを使用したパラメータ置換に使用されます

#define  st(x)  #x
 cout<<st(tesing); //  equivalent to  cout<<"testing";

#もプリプロセッサディレクティブです。

于 2012-06-01T11:48:58.143 に答える
1

Cプリプロセッサを説明するウィキペディアのページから:

## 演算子は、次の例のように、2 つのトークンを 1 つのトークンに連結します。

#define DECLARE_STRUCT_TYPE(name) typedef struct name##_s name##_t
DECLARE_STRUCT_TYPE(g_object); // Outputs typedef struct g_object_s g_object_t;

#オペレーターは、C プリプロセッサーに他のディレクティブを通知します。以下に例を示します。#include, #define, #undef, #error, #if, #ifdef, #ifndef, #else, #elif, #endif

于 2012-06-01T02:52:57.597 に答える
1

で始まるコード ステートメント#は、その後に続くものがプリプロセッサ ディレクティブであり、プリプロセッサによって展開される必要があることを示します。

##トークン貼り付けまたはトークン連結マクロと呼ばれます。

于 2012-06-01T02:53:54.050 に答える
0

「#」は実際には演算子ではなく、プリプロセッサ ディレクティブであり、「##」は関数マクロ定義にのみ使用されます。


C には多くのプリプロセッサ ディレクティブがあります。

マクロ定義には、次のものがあります。

#define
#undef

条件付き包含には、次のものがあります。

#ifdef
#ifndef
#if
#endif
#else
#elif

回線制御には、次のものがあります。

#line

エラーには、次のものがあります。

#error

ソース ファイルのインクルードには、次のものがあります。

#include

プラグマ ディレクティブには、次のものがあります。

#pragma

詳細については、http://www.cplusplus.com/doc/tutorial/preprocessor/を参照してください。

于 2012-06-01T03:02:03.157 に答える