在"构建设置"选项卡下的"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);