字符串文字的汇编

Iva*_*nov 4 c++ compilation string-concatenation string-literals

为什么可以编译由空格,制表符或"\n"分隔的两个字符串文字而没有错误?

int main()
{
   char * a = "aaaa"  "bbbb";
} 
Run Code Online (Sandbox Code Playgroud)

"aaaa"是一个字母*"bbbb"是一个字母*

没有特定的连接规则来处理两个字符串文字.显然,以下代码在编译期间出错:

#include <iostream>
int main()
{
   char * a = "aaaa";
   char * b = "bbbb";
   std::cout << a b;
}
Run Code Online (Sandbox Code Playgroud)

这种连接是否适用于所有编译器?"aaaa"的空终止在哪里?"aaaabbbb"是一个连续的RAM块吗?

Som*_*ude 9

如果你在第6 阶段看到例如这个翻译阶段参考它会:

相邻的字符串文字是连接在一起的.

这就是这里发生的事情.您有两个相邻的字符串文字,它们连接成一个字符串文字.

这是标准行为.

它只适用于字符串文字,而不是两个指针变量,正如您所注意到的那样.


Vla*_*cow 5

在这个声明中

char * a = "aaaa"  "bbbb";
Run Code Online (Sandbox Code Playgroud)

在语法分析将相邻字符串文字视为一个文字之前,编译器在某些编译步骤中.

所以对于编译器,上面的语句相当于

char * a = "aaaabbbb";
Run Code Online (Sandbox Code Playgroud)

也就是说,编译器只存储一个字符串文字 "aaaabbbb"