gcc文档引用了-fconstant-string-class
参数,该参数允许您更改用于@"Objective-C string literal"
实例的类。我发现这似乎不适用于clang,使用这个来源:
#import <stdio.h>
#import <objc/runtime.h>
@interface ConstantString
{
Class isa;
char *c_string;
unsigned int len;
}
@end
@implementation ConstantString
- (Class)class {return isa;}
@end
int main(int argc, char *argv[])
{
fprintf(stderr, "%s\n", class_getName([@"foo" class]));
return 0;
}
以这种方式编译这个编译器:
$ clang -v
Apple clang 4.0版(标签/ Apple / clang-421.10.60)(基于LLVM 3.1svn)
目标:x86_64-apple-darwin12.0.0
线程模型:posix
$ clang -fconstant-string-class = ConstantString -lobjc constantstring.m
架构x86_64的未定义符号:
“___ CFConstantStringClassReference”,引自:
CFString in constantstring-C7icsk.o ld: symbol(s) not found for architecture x86_64
clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
如果我链接到Foundation,那么我发现它仍然使用默认的常量字符串类:
$ clang -fconstant-string-class = ConstantString -lobjc constantstring.m - 框架基金会
$ ./a.out
__ NSCFConstantString
那么你真的可以使用clang为字符串文字定义一个自定义类吗?并且可以更改数组,字典和数字文字的类吗?