Objective c 预处理器能否将给定符号中的字母大写,并将其作为新符号输出?

Objective c 预处理器能否将给定符号中的字母大写,并将其作为新符号输出?,objective-c,xcode,llvm,c-preprocessor,stringification,Objective C,Xcode,Llvm,C Preprocessor,Stringification,我想知道预处理器(特别是Xcode的LLVM中提供的预处理器)是否能够执行以下操作: #define CAPS_SYMBOL(x) ... 此预处理器语句在代码中的位置: int CAPS_SYMBOL(lala) = 1; 将输出以下有效的可编译代码: int Lala = 1; 我想做的最终目标是制作一个宏来实现这一点,因为存在一些CAPS_符号的机制: #define MAKE_WEAK_VAR(x) __weak __typeof(x) weak ## CAPS_SYMBOL(x)

我想知道预处理器(特别是Xcode的LLVM中提供的预处理器)是否能够执行以下操作:

#define CAPS_SYMBOL(x) ...
此预处理器语句在代码中的位置:

int CAPS_SYMBOL(lala) = 1;
将输出以下有效的可编译代码:

int Lala = 1;
我想做的最终目标是制作一个宏来实现这一点,因为存在一些CAPS_符号的机制:

#define MAKE_WEAK_VAR(x) __weak __typeof(x) weak ## CAPS_SYMBOL(x) = x

这可能吗?如果是这样,怎么做?

不,预处理器不能将令牌大写。但你可以定义

#define MAKE_WEAK_VAR(x) __weak __typeof(x) weak ## x = x
相反。那么比如说

MAKE_WEAK_VAR(self);
扩展到

__weak __typeof(self) weakself = self;

如果你永远也看不到它,为什么你会关心它的大写呢?我会关心它,因为它会定义一个稍后使用的变量。MAKE_-WEAK_-VAR(blah)将定义一个称为weakBlah的弱变量,我可以稍后引用它。哦,我明白了,如果我读到它,那将非常混乱。因为我永远都无法查找变量声明。这有点违背了人们阅读你的代码的期望是的,我想这不是一个很好的练习;我有一些类似的东西,不做动态变量命名,只是在宏中声明weakSelf,这是一个更好的选择;不过,我希望使宏符合camelCase大小写。哦,谢谢你的确认!