我想定义一个宏或其他一些可以在编译时生成类似变量声明的方法。例如。我想像这样声明 50 个 NSString
变量:#define VAR_GENERATOR (var_name, var_content) NSString* var_name = @"var_content"
并在 for 循环中执行:
for(NSString* string in [stringArray count])
{
NSString* var_name = [NSString stringWithFormat: @"string%d", iteration];
VAR_GENERATOR (var_name, string);
iteration++;
}
假设 [stringArray count]
== 50 所以我想要像这样声明 50 个 NSString
变量:NSString* string1 = @"数组中的第一个字符串"
等等...
那么有一些预处理器方法可以实现这一点吗?或者在 Objective-C 中可能有其他一些更优雅、更灵活的编译时元编程工具?
最佳答案
出于多种原因,使用编译时结构无法完成您想做的事情;
根本原因是var_name
的内容在编译时是未知的,所以编译器根本不可能知道这个变量应该取什么名字。但即使是这样,变量名冲突又如何呢?假设局部变量的数量未知,如果编译器允许,堆栈布局会是什么?
请允许我补充一点,即使 如果您能够做到这一点,那么您的变量将在本地范围内声明,并且无法在您的之外访问
循环。
在您的位置,我会尝试回到您真正想要完成的事情,并思考是否需要运行时构造。
如果答案是肯定的,(您是否正在尝试为某种语言构建解释器?),那么我们就有了将任意名称映射到值的工具,例如 NSMutableDictionnary
或 std: :map
.
长话短说: 不,也许您可以稍微扩展一下您想要完成的目标。
关于ios - 如何在编译时生成变量声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20162905/