Objective-C/C++ 常量

3

编辑:我的示例可能会造成一些混淆。我已经更改了下面的示例以反映我想要实现的内容。希望这更清楚。

我正在尝试在我的Objective-C代码中定义一个常量。我使用标准的#define来实现这个目的。例如:

#define bluh "a"

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

#define blah bluh +@"b"

编译器报错(理所当然)“二进制+的操作数无效”。我该怎么做才能使其正常工作?感谢您的帮助。
我也尝试了Objective-C的方式,像这样:
NSString *const A =@"a";
NSString *const B = [NSString stringWithFormat:@"%@%@",A,@"b"];

但是这会给我另一个错误:“初始化元素不是常量”。 非常感谢您的帮助。 祝好,
2个回答

2

我不懂Objective C。在C++中,相邻的字符串字面量将被连接起来,因此可以使用以下方式:

#define blah bluh "b"

另外,在可能的情况下,通常使用大写字母作为预处理器定义的标准做法,而且没有其他用途,从而最大限度地减少意外替换的可能性。


我不介意用C++,但这个解决方案有效。谢谢Tony。 - iSee
1
@Stephen:实际上不是这样的。如果你在C++程序中的任何地方放置"a" "b",与任何预处理器使用无关,C++编译器都会连接这些文字。例如,cout << "first line\n" "second line\n";。因此,在以字符串字面流开始和结束的行之间,您不需要<<或单独的语句再次提及流,并且将它们放在那里(通常微不足道)是低效的。另外,为什么要将预处理器称为“C”预处理器-可能是相同的,但是很多C++功能也是如此。"int x"的类型是"C int"吗? - Tony Delroy

1
在标准的c/c++中,您可以通过将文本字符串放置在一起来连接它们,例如:"string one-" "string two"会在编译器处理后变成"string one-string two"
不确定这是否适用于您开始使用的'@'符号,但可以尝试执行以下操作:
#define bluh "a"
#define blah bluh @"b"

我对Objective-C的经验不是很多,但希望他们保持这一部分可以互操作。


1
所有有效的C代码都是有效的Objective-C代码,并且行为相同。Objective-C语言是对C语言非常简洁的扩展。话虽如此,提问者想要做你建议的事情,但是不想使用@符号。 - Stephen Canon
1
在Objective-C中,如果您使用@前缀,它也可以工作。@"1" "2" "3"与@"123"相同。 - gnasher729

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接