【问题标题】:Objective-C/C++ constantsObjective-C/C++ 常量
【发布时间】:2010-08-26 01:41:52
【问题描述】:

编辑:我的例子可能造成了一些混乱。我更改了下面的示例以反映我想要实现的目标。希望这更清楚。

我正在尝试在我的 Objective-C 代码中定义一个常量。我正在使用标准#define 来执行此操作。例如:

#define bluh "a"

我想定义另一个像这样的常量

#define blah bluh +@"b"

编译器抛出一个错误(正确的)“二进制 + 的操作数无效”。我怎样才能让它工作?感谢您的帮助。

我也尝试过这样的 Objective-C 方式:

NSString *const A =@"a";
NSString *const B = [NSString stringWithFormat:@"%@%@",A,@"b"];

但这给了我另一个错误“初始化器元素不是常数” 任何帮助将不胜感激。

干杯,

【问题讨论】:

    标签: c++ objective-c constants


    【解决方案1】:

    我不了解objective C。在C++中,相邻的字符串字面量是串联的,所以使用就足够了:

    #define blah bluh "b"

    顺便说一句/在预处理器定义中尽可能使用大写字母是标准做法,并且没有其他目的,最大限度地减少意外替换的机会。

    【讨论】:

    • 我不介意它是否是 c++,但这个解决方案有效。谢谢托尼。
    • @Stephen:实际上,没有。如果您将“a”“b”放在 C++ 程序中的任何位置——完全独立于任何预处理器的使用——C++ 编译器将连接文字。例如,cout
    【解决方案2】:

    在标准 c/c++ 中,您可以通过将文字字符串彼此相邻放置来连接它们,例如"string one-" "string two" 将在编译器完成后变为 "string one-string two"

    不确定这是否适用于您一开始的“@”符号,但请尝试这样做:

    #define bluh "a"
    #define blah bluh @"b"
    

    在 Objective-C 方面没有太多经验,但希望他们保持这部分的互操作性。

    【讨论】:

    • 所有有效的 C 代码都是有效的 Objective-C 代码,行为相同。语言 Objective-C 是对 C 的极简扩展。也就是说,提问者想要完全按照你的建议去做,但没有 @ 符号。
    • 在 Objective-C 中,如果你使用 @ 前缀,它也可以工作。 @"1" "2" "3" 与@"123" 相同。
    猜你喜欢
    • 2010-10-07
    • 2012-07-14
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多