重複の可能性:
Cプリプロセッサ、マクロの結果を文字列化する
私はこれを定義しています:
#define VERSION 0.3.2
@"0.3.2"
これを(NSString)に変換したい-それは可能ですか?#defineに引用符を追加することは許可されていないとします。
このようなものですが、おそらく追加の手順があります:
NSString *myVersion = [NSString stringWith???:VERSION];
重複の可能性:
Cプリプロセッサ、マクロの結果を文字列化する
私はこれを定義しています:
#define VERSION 0.3.2
@"0.3.2"
これを(NSString)に変換したい-それは可能ですか?#defineに引用符を追加することは許可されていないとします。
このようなものですが、おそらく追加の手順があります:
NSString *myVersion = [NSString stringWith???:VERSION];
リンクした可能性のある複製のように、マクロ展開を文字列化する必要があるため、さらに 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
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define AT __FILE__ ":" TOSTRING(__LINE__)
@HotLick の最高級のマクロ マジック。