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

pho*_*ho0 5 c objective-c

我的Objective-C类中有类似的东西

@interface PREFIX_MyClass {
...
@end
Run Code Online (Sandbox Code Playgroud)

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

@interface AwesomeMyClass {
...
@end
Run Code Online (Sandbox Code Playgroud)

所以像

#define PREFIX_ Awesome
Run Code Online (Sandbox Code Playgroud)

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

#define PrefixClass(NAME) Awesome##NAME

@interface PrefixClass(MyClass)
Run Code Online (Sandbox Code Playgroud)

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

ugh*_*fhw 2

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

#define PREFIX_MyClass AwesomeMyClass
@interface PREFIX_MyClass
Run Code Online (Sandbox Code Playgroud)

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

#define ADD_PREFIX(name) Awesome##name
#define PREFIX_MyClass ADD_PREFIX(MyClass)
@interface PREFIX_MyClass
Run Code Online (Sandbox Code Playgroud)

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