我只是 llvm 汇编的初学者,我喜欢就我不确定的一切提出问题。
我只是在看 hello world 程序和 @str = internal constant [13 x i8] c"hello world\0A\00"
我不明白后缀是什么意思 \0A\00 我尝试阅读它,但它最终在输出中没有换行符但是如果我只有 \0A 换行符又回来了......我觉得 \00 是没用……是真的吗?
我只是 llvm 汇编的初学者,我喜欢就我不确定的一切提出问题。
我只是在看 hello world 程序和 @str = internal constant [13 x i8] c"hello world\0A\00"
我不明白后缀是什么意思 \0A\00 我尝试阅读它,但它最终在输出中没有换行符但是如果我只有 \0A 换行符又回来了......我觉得 \00 是没用……是真的吗?
在 LLVM IR 语法中,后跟两个十六进制字符的反斜杠表示一个字符,其ASCII 值与这两个字符定义的值相同。
在这种情况下,这些字符是索引 10 (0xA) 处的字符 - 这是一个换行符 - 以及索引 0 处的字符,称为“null”,用于终止许多不同系统中的字符串。在 C 行语言中,这些将被写为\n
and \0
(或只是 0),并\0
隐式添加到 C 中的文字字符串的末尾(但不是在 LLVM IR 中)。
换句话说,你看到的字符串等同"hello world\n"
于 C 中的字符串。
注意:尽管可以使用非空终止的字符串,但它非常不健康,并且许多内置字符串操作会对这些字符串产生未定义的行为。不要省略空终止。