如何在 GCC 中将重复或相乘的字符串文字合并为一个
how to merge duplicated or multiplicated string literals into one in GCC
我得到了多个字符串文字,例如
char* a1 = "apalaxia";
char* t = "apalaxia";
char* zzzz = "apalaxia";
跨几个编译单元/.o 文件
我强烈需要它们在一个运行时下合并
地址(因此所有这些都是一个 char* 值)
如何在 GCC 中执行此操作(在 C++ 模式下)?我试过 -fmerge-constants
和 -fmerge-all-constants 但 id 不合并
有什么问题
const char text[] = "apalaxia";
const char *t = text;
...
C 和 C++ 标准都不保证合并 字符串文字。如果您需要相同的地址,则无法使用单个 definition。
请注意,如果指针可能指向非 const
以后,您必须声明它们 char *
,但分配 const
指针可能会遇到麻烦。
-fmerge-constants 和-fmerge-all-constants 都不能保证字符串文字将被合并。两者都声明他们 "attempt to merge identical constants",但不保证他们会。
此外,C++ 标准的第 2.13.5 节指出 "Whether all string literals are distinct (that is, are stored in nonoverlapping objects) and whether successive evaluations of a string-literal yield the same or a different object is unspecified."
所以很遗憾,我认为如果不明确声明每个副本并将其导出到使用它的翻译单元,就无法获得有保证的单一位置。
我得到了多个字符串文字,例如
char* a1 = "apalaxia";
char* t = "apalaxia";
char* zzzz = "apalaxia";
跨几个编译单元/.o 文件
我强烈需要它们在一个运行时下合并 地址(因此所有这些都是一个 char* 值)
如何在 GCC 中执行此操作(在 C++ 模式下)?我试过 -fmerge-constants 和 -fmerge-all-constants 但 id 不合并
有什么问题
const char text[] = "apalaxia";
const char *t = text;
...
C 和 C++ 标准都不保证合并 字符串文字。如果您需要相同的地址,则无法使用单个 definition。
请注意,如果指针可能指向非 const
以后,您必须声明它们 char *
,但分配 const
指针可能会遇到麻烦。
-fmerge-constants 和-fmerge-all-constants 都不能保证字符串文字将被合并。两者都声明他们 "attempt to merge identical constants",但不保证他们会。
此外,C++ 标准的第 2.13.5 节指出 "Whether all string literals are distinct (that is, are stored in nonoverlapping objects) and whether successive evaluations of a string-literal yield the same or a different object is unspecified."
所以很遗憾,我认为如果不明确声明每个副本并将其导出到使用它的翻译单元,就无法获得有保证的单一位置。