Xcode LLVM 处理器宏的字符串化端点

Stringify Endpoint for Xcode LLVM Processor Macros

在 "Build Settings" 选项卡下的 "Apple LLVM 7.0 - Preprocessing" 部分,我将预处理器宏定义为:

STR(arg)=#arg
HUBNAME=STR("myhub")
HUBLISTENACCESS=STR("Endpoint=sb://abc-xyz.servicebus.windows.net/;SharedAccessKeyName=DefaultListenSharedAccessSignature;SharedAccessKey=JKLMNOP=")

在我的代码中,我尝试将 HUBLISTENACCESS 的值作为字符串引用:

SBNotificationHub* hub = [[SBNotificationHub alloc] initWithConnectionString:@HUBLISTENACCESS notificationHubPath:@HUBNAME];

但是我从 Xcode 收到关于 "hub" 初始化的错误:

Expected ';' at end of declaration

Unterminated function-like macro invocation

Unexpected '@' in program

我怀疑预处理器宏中 HUBLISTENACCESS 的定义需要正确转义,但我已经尝试了一些方法,但似乎无法正确转义。有人可以帮助我了解我做错了什么吗?

有一个 非常明显的原因 为什么您尝试这样做失败了:您在 HUBLISTENACCESS 中使用了 //。因为在C中,//之后的东西被注释掉了所以在编译器方面,你的最后一行实际上是:

HUBLISTENACCESS=STR("Endpoint=sb:

要测试它,只需删除一个斜线,它就会再次工作。你在做什么,比如试图这样定义事物:

#define FOO //

我认为这是不可能的。老实说,我不知道如何在 Build Settings 中做到这一点,但还有其他方法可以通过 PCH 文件 (前缀header).

PCH 中的一个简单的行将省去所有这些麻烦:

#define HUBLISTENACCESS @"Endpoint=sb://abc-xyz.servicebus.windows.net/;SharedAccessKeyName=DefaultListenSharedAccessSignature;SharedAccessKey=JKLMNOP="

然后按如下方式使用它:(不再需要 @!)

NSLog(@"%@", HUBLISTENACCESS);