关于以null结尾的字符串(混淆)
About the null-terminated strings (confused)
下面的着色器被称为一个字符串和一个以null结尾的字符串。
着色器:
const GLchar* VertexShader =
{
"#version 330n"
"layout(location=0) in vec4 in_Position;n"
"layout(location=1) in vec4 in_Color;n"
"out vec4 ex_Color;n"
"void main(void)n"
"{n"
" gl_Position = in_Position;n"
" ex_Color = in_Color;n"
"}n"
};
我的问题是:
- 每行末尾的斜线是什么意思?此外,为什么最后一行没有斜线
- 着色器中有几个字符串,为什么说着色器只有一个字符串
- 为什么说它是一个以null结尾的字符串?(由于没有"\0")
每行末尾的斜线是什么意思?此外,为什么最后一行没有斜线?
这是一条线路的延续,意味着当前线路在下一条线路中延续。
着色器中有几个字符串,为什么说着色器只有一个字符串?
顺序字符串文字被折叠成一个单独的文字。因此"ab" "c"
变成"abc"
。
为什么说它是一个以null结尾的字符串?(由于没有"\0")
字符串文字以null结尾。所以"ab"
实际上就是{'a', 'b', ' '}
。请注意,当字符串文字被折叠时,除了最后一个隐式null终止字符外,其他所有字符都将被删除。
每当有一个反斜杠()后面跟着一行新行时,这些字符就会被删除,将这两行拼接在一起。这种情况发生在翻译的早期阶段,甚至在执行预处理指令之前。这就为您提供了物理源线和逻辑源线之间的区别。从逻辑上讲,该代码等效于以下内容:
const GLchar* VertexShader =
{
"#version 330n" "layout(location=0) in vec4 in_Position;n" "layout(location=1) in vec4 in_Color;n" "out vec4 ex_Color;n"
"void main(void)n" "{n" " gl_Position = in_Position;n" " ex_Color = in_Color;n" "}n"
};
然而,这种线路拼接在这里是完全没有必要的。
稍后在翻译阶段(在执行预处理指令之后),任何相邻的字符串文字标记都会被连接起来。也就是说,它们被连接起来,就好像它们只是一个字符串文字。上面代码中的所有字符串文字都将被连接起来(即使新行将它们分隔开)。
字符串文字总是为您提供一个比字符串文字大一个字符的const char
数组,因为它在末尾添加了一个