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

时间:2016-05-02 17:22:50

标签: xcode c-preprocessor stringification

在“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的定义需要正确转义,但我已经尝试了一些东西,似乎无法做到正确。有人可以帮我理解我做错了吗?

1 个答案:

答案 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);