Cadena Dirección literal en las unidades de traducción [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Las direcciones de dos punteros de caracteres a diferentes literales de cadena son iguales 10 respuestas

Me gustaría preguntar si es portátil confiar en la dirección literal de cadena en las unidades de traducción. Es decir:

Un archivo dadofoo.c tiene una referencia a un literal de cadena"I'm a literal!", ¿es correcto y portátil confiar en eso en otro archivo dado,bar.c en ejemplo, que elmismo literal de cadena "I'm a literal!" tendrá elmisma dirección de memoria? Teniendo en cuenta que cada archivo se traducirá a un individuo.o archivo.

Para una mejor ilustración, sigue un código de ejemplo:

# 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?

Y un ejemplo de líneas de comando 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

¿Qué pasa en la misma unidad de traducción? ¿Sería esto confiable si los literales de cadena están en elmismo unidad de traducción?

Respuestas a la pregunta(2)

Su respuesta a la pregunta