为Xcode LLVM处理器宏的Stringify Endpoint



在"构建设置"选项卡下的"Apple LLVM 7.0-预处理"部分,我将预处理器宏定义为:

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

在我的代码中,我试图将HUBLISTNACCESS的值引用为字符串:

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

但我从Xcode中得到了初始化"集线器"的错误:

应为";"申报结束时

未终止的函数,如宏调用

程序中出现意外的"@"

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

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

HUBLISTENACCESS=STR("Endpoint=sb:

要测试它,只需删除一个斜杠,它就会再次工作。你所做的事情就像试图定义这样的东西:

#define FOO //

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

PCH中的一条简单线路将省去所有这些麻烦:

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

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

NSLog(@"%@", HUBLISTENACCESS);

最新更新