1

重複の可能性:
Cプリプロセッサ、マクロの結果を文字列化する

私はこれを定義しています:

#define VERSION 0.3.2

@"0.3.2"これを(NSString)に変換したい-それは可能ですか?#defineに引用符を追加することは許可されていないとします。

このようなものですが、おそらく追加の手順があります:

NSString *myVersion = [NSString stringWith???:VERSION];
4

2 に答える 2

2

リンクした可能性のある複製のように、マクロ展開を文字列化する必要があるため、さらに 2 つのレベルのマクロが必要です。

#define VERSION 0.3.2
#define StringifyWithoutExpandingMacros(x) #x
#define Stringify(x) StringifyWithoutExpandingMacros(x)

NSLog(@"VERSION = %@", @StringifyWithoutExpandingMacros(VERSION));
// output: VERSION = VERSION

NSLog(@"VERSION = %@", @Stringify(VERSION));
// output: VERSION = 0.3.2

@マクロ呼び出しの前に を貼り付けるだけでよいことに注意してください。マクロ内にある必要はありません。ただし、必要に応じてマクロに入れることができます。

#define NSStringifyWithoutExpandingMacros(x) @#x
#define NSStringify(x) NSStringifyWithoutExpandingMacros(x)

NSLog(@"VERSION = %@", NSStringify(VERSION));
// output: VERSION = 0.3.2
于 2012-07-19T00:15:43.943 に答える
1

ストリング化

#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define AT __FILE__ ":" TOSTRING(__LINE__)

@HotLick の最高級のマクロ マジック。

于 2012-07-19T00:15:35.423 に答える