私はいくつかのオープンソース プロジェクトを見ていますが、次のようなものがあります。
NSLog(@"%s w=%f, h=%f", #size, size.width, size.height)
サイズ記号の直前の「#」の意味は何ですか? それはC文字列のある種の接頭辞ですか?
私はいくつかのオープンソース プロジェクトを見ていますが、次のようなものがあります。
NSLog(@"%s w=%f, h=%f", #size, size.width, size.height)
サイズ記号の直前の「#」の意味は何ですか? それはC文字列のある種の接頭辞ですか?
これはマクロ定義の本体ですか? 次に、#
次の識別子を文字列化するために使用できます。つまり、「文字列」(コードなし) を出力します。
の正式名称#
はstringizing operatorです。引数を引用符で囲み、必要に応じて埋め込まれた引用符やバックスラッシュをエスケープして、C 文字列定数を作成します。マクロの定義内でのみ許可され、通常のコードでは許可されません。例えば:
// This is not legal C
const char *str = #test
// This is ok
#define STRINGIZE(x) #x
const char *str1 = STRINGIZE(test); // equivalent to str1 = "test";
const char *str2 = STRINGIZE(test2"a\""); // equivalent to str2 = "test2\"a\\\"";
関連するプリプロセッサ オペレータは、トークン貼り付けオペレータ ##
です。2 つのトークンを取り、それらを貼り付けて 1 つのトークンを取得します。文字列化演算子と同様に、マクロ定義でのみ使用でき、通常のコードでは使用できません。
// This is not legal C
int foobar = 3;
int x = foo ## bar;
// This is ok
#define TOKENPASTE(x, y) x ## y
int foobar = 3;
int x = TOKENPASTE(foo, bar); // equivalent to x = foobar;