Строковый буквальный адрес в единицах перевода [дубликат]
На этот вопрос уже есть ответ здесь:
Адреса двух символьных указателей на разные строковые литералы одинаковы 10 ответовЯ хотел бы спросить, является ли это портативным, чтобы полагаться на строковый литеральный адрес через единицы перевода? то есть:
Данный файл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
Как насчет того же переводчика? Будет ли это надежным, если строковые литералы находятся втак же блок перевода?