我想问一下,在跨翻译单元时是否可以依赖于字符串字面量地址?例如:
一个名为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
如果字符串字面量在同一个翻译单元中,那么这样做可靠吗?
char const[]
,并且是一个const对象。在C中,字符串字面值的类型为char[]
。但是有一条特殊规则,即不允许修改它,否则会导致未定义的行为。 - James Kanzeconst
字符串,我相信程序员可以覆盖字符串的内容(但可能会导致未定义的行为),如果它是池化的,则无法正常工作。 - Alnitak