【问题标题】:Stringify Endpoint for Xcode LLVM Processor MacrosXcode LLVM 处理器宏的字符串化端点
【发布时间】:2016-08-27 13:12:30
【问题描述】:

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

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 中收到有关“集线器”初始化的错误:

预期的';'在声明结束时

未终止的类似函数的宏调用

程序中出现意外的“@”

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

【问题讨论】:

    标签: xcode c-preprocessor stringification


    【解决方案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);
    

    【讨论】:

    • 于是我找到了解决双斜线问题的潜在解决方案:在两个斜线之间插入一个“$()”;例如:WEBSITE_URL = https:/$()/www.example.com。请参阅stackoverflow.com/questions/21317844/… 上接受的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2012-07-21
    • 2017-09-18
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    相关资源
    最近更新 更多