如何在GCC中将重复或多重的字符串文字合并为一个

我得到了多重的字符串文字

char* a1 = "apalaxia"; char* t = "apalaxia"; char* zzzz = "apalaxia"; 

跨编译单元/ .o文件

我强烈要求所有它们在一个运行时地址下合并(因此所有它们都有一个char *值)

如何在GCC中进行(在c ++模式下)? 我尝试了-fmerge-constants和-fmerge-all-constants但是id不合并

-fmerge-constants和-fmerge-all-constants都不保证字符串文字将被合并。 两者都表示他们“试图合并相同的常量”,但不保证他们会这样做。

此外,C ++标准的2.13.5节规定“所有字符串文字是否都是不同的(即存储在非重叠对象中),以及字符串文字的连续评估是否产生相同或不同的对象是未指定的。”

所以不幸的是,我认为有一种方法可以获得有保证的单一位置,而无需明确声明每个位置的单个副本并将其导出到使用它的翻译单元。

出什么问题了

 const char text[] = "apalaxia"; const char *t = text; ... 

C和C ++标准都不保证合并字符串文字 。 如果您需要相同的地址,则无法使用单个定义

请注意,如果指针可能指向非const ,则必须将它们声明为char * ,但可能无法分配const指针。