ash*_*gpu 4 c compiler-construction
我试图找到c和c ++编译器的规则是什么,将字符串放入可执行文件的数据部分,不知道在哪里看.我想知道以下所有地址在c/c ++中是否保证与规范相同:
char * test1 = "hello";
const char * test2 = "hello";
static char * test3 = "hello";
static const char * test4 = "hello";
extern const char * test5; // Defined in another compilation unit as "hello"
extern const char * test6; // Defined in another shared object as "hello"
Run Code Online (Sandbox Code Playgroud)
在Windows上进行测试,它们都是一样的.但是我不知道它们是否适用于所有操作系统.
我想知道以下所有地址是否符合规范c/c ++中的相同
字符串文字允许是同一个对象,但不是必需的.
C++说:
(C++ 11,2.14.5p12)"是否所有字符串文字都是不同的(即存储在非重叠对象中)是实现定义的.尝试修改字符串文字的效果是不确定的."
C说:
(C11,6.5.2.5p7)"字符串文字和具有const限定类型的复合文字不需要指定不同的对象.1101)这允许实现共享字符串文字和常量复合文字的存储,具有相同或重叠的表示."
而C99理由说:
"此规范允许实现共享具有相同文本的字符串副本,将字符串文字放在只读内存中,并执行某些优化"