我在Objc中编写了一些测试代码,并使用Clang -rewrite-objc将其转换为C ++,发现在C ++代码中似乎存在重新声明错误,但该代码实际上运行良好。 测试代码:
int main(int argc,const char * argv[]) {
@autoreleasepool {
NSString *var = @"";
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(9 * NSEC_PER_SEC)),dispatch_get_main_queue(),^{
NSLog(@"%@",var);
NSObject *var = @"";
NSLog(@"%@",var);
});
}
return 0;
}
并使用clang -rewrite-objc main.m
重写为C ++:
static void __main_block_func_0(struct __main_block_impl_0 *__cself) {
NSString *var = __cself->var; // bound by copy
NSLog((NSString*)&__NSConstantStringImpl__var_folders_n0_4hrn9qgn3blbbt6ybq79lzt00000gn_T_main_e76f89_mi_2,var);
NSObject *var = (NSString *)&__NSConstantStringImpl__var_folders_n0_4hrn9qgn3blbbt6ybq79lzt00000gn_T_main_e76f89_mi_3;
NSLog((NSString *)&__NSConstantStringImpl__var_folders_n0_4hrn9qgn3blbbt6ybq79lzt00000gn_T_main_e76f89_mi_4,var);
}
那我为什么要在方块的图形范围内重新定义var
?
我认为这种情况不适用于C ++中的local var
和global var
。
感谢您的帮助或讨论〜