4

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 为字符串文字定义一个自定义类吗?数组、字典和数字字面量的类可以改变吗?

4

0 回答 0