我想问问它是否可移植性依赖跨翻译单元的字符串文字地址?即:字符串跨翻译单元的文字地址
给定文件foo.c
有一个字符串"I'm a literal!"
一个参考,是正确和便携依靠在其他给定的文件,bar.c
的情况下,该相同的字符串字面"I'm a literal!"
将有相同的内存地址?考虑到每个文件将被翻译成个人文件.o
。
为了更好的说明,如下的示例代码:
# File foo.c
/* ... */
const char * x = "I'm a literal!"
# File bar.c
/* ... */
const char * y = "I'm a literal!"
# File test.c
/* ... */
extern const char * x;
extern const char * y;
assert (x == y); //Is this assertion going to fail?
和一个gcc示例命令行:
gcc -c -o foo.o -Wall foo.c
gcc -c -o bar.o -Wall bar.c
gcc -c -o test.o -Wall test.c
gcc -o test foo.o bar.o test.o
什么关于同一翻译单元?如果字符串文字在相同的翻译单元中,这是否可靠?
不,你不能依靠这个。 – 2014-10-09 13:27:41
@NeilKirk谢谢Neil,我已经编辑并添加了第二个问题。任何背后的理由都会有很大的启发。 – 2014-10-09 13:30:29
@fanl - Visual C++编译器套件有一个“字符串池”的选项,其中相同的文字将具有相同的指针值。最后一句中的关键词是* option *。这意味着你不能相信指针值是相等的。 – PaulMcKenzie 2014-10-09 13:37:49