在“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”:
预期';'在声明结束时
未终止的类函数宏调用
程序中意外的'@'
我怀疑预处理器宏中HUBLISTENACCESS的定义需要正确转义,但我已经尝试了一些东西,似乎无法做到正确。有人可以帮我理解我做错了吗?
答案 0 :(得分:1)
有一个非常明显的原因您尝试失败的原因:您在//
中使用HUBLISTENACCESS
。和C一样,//
之后的事情被注释掉了,所以在编译器方面,你的最后一行实际上是:
HUBLISTENACCESS=STR("Endpoint=sb:
要测试它,只需删除一个斜杠,它就会再次运行。你在做什么就像试图定义这样的东西:
#define FOO //
我不认为这是可能的。老实说,我不知道如何在构建设置中做到这一点,但还有其他方法可以通过 PCH文件(前缀标题)全局完成。
PCH中的一条简单线路将拯救所有这些麻烦:
#define HUBLISTENACCESS @"Endpoint=sb://abc-xyz.servicebus.windows.net/;SharedAccessKeyName=DefaultListenSharedAccessSignature;SharedAccessKey=JKLMNOP="
然后使用如下:(不再需要@
!)
NSLog(@"%@", HUBLISTENACCESS);