有没有办法用预处理器替换部分字?

时间:2012-05-03 00:34:10

标签: objective-c c

我的目标-C类

中有类似的东西
@interface PREFIX_MyClass {
...
@end

我想使用预处理器将其转换为:

@interface AwesomeMyClass {
...
@end

类似

#define PREFIX_ Awesome

不起作用,因为它是单词的一部分。还有其他方法吗?我知道我可以使用这样的东西:

#define PrefixClass(NAME) Awesome##NAME

@interface PrefixClass(MyClass)

但是我不喜欢这个,因为它破坏了代码的完整性并在开发工具中引用了以下内容(即:在这种情况下为Xcode)

2 个答案:

答案 0 :(得分:2)

这不是很优雅,但您可以使用预处理器替换整个类名而不仅仅是part。

#define PREFIX_MyClass AwesomeMyClass
@interface PREFIX_MyClass

当然,如果您多次使用前缀并且它发生变化,这就成了一个问题。你可以通过使用另一个调用另一个宏来添加前缀来解决这个问题,这样只有一个宏包含实际的前缀。

#define ADD_PREFIX(name) Awesome##name
#define PREFIX_MyClass ADD_PREFIX(MyClass)
@interface PREFIX_MyClass

对于您想要添加前缀的所有内容,仍然需要一个宏,但代码完成将识别PREFIX_MyClass名称。

答案 1 :(得分:0)

这并不是您所要求的,但它可能是实现目标的另一条途径。 Xcode允许您为项目定义类前缀。在文件导航器中选择您的项目,并在文件检查器(右侧边栏的第一个“选项卡”)中,您将拥有:

enter image description here

您在“类别前缀”字段中添加的任何文本都将添加到您在该项目中创建的任何类的名称之前。