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;
}
用这个编译器这样编译:
$ 铿锵 -v
苹果 clang 版本 4.0 (tags/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 -framework Foundation
$ ./a.out
__NSCFConstantString
那么你真的可以使用 clang 为字符串文字定义一个自定义类吗?数组、字典和数字字面量的类可以改变吗?