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