3

我只是 llvm 汇编的初学者,我喜欢就我不确定的一切提出问题。

我只是在看 hello world 程序和 @str = internal constant [13 x i8] c"hello world\0A\00"

我不明白后缀是什么意思 \0A\00 我尝试阅读它,但它最终在输出中没有换行符但是如果我只有 \0A 换行符又回来了......我觉得 \00 是没用……是真的吗?

4

1 回答 1

3

在 LLVM IR 语法中,后跟两个十六进制字符的反斜杠表示一个字符,其ASCII 值与这两个字符定义的值相同。

在这种情况下,这些字符是索引 10 (0xA) 处的字符 - 这是一个换行符 - 以及索引 0 处的字符,称为“null”,用于终止许多不同系统中的字符串。在 C 行语言中,这些将被写为\nand \0 (或只是 0),并\0隐式添加到 C 中的文字字符串的末尾(但不是在 LLVM IR 中)。

换句话说,你看到的字符串等同"hello world\n"于 C 中的字符串。

注意:尽管可以使用非空终止的字符串,但它非常不健康,并且许多内置字符串操作会对这些字符串产生未定义的行为。不要省略空终止。

于 2013-02-05T15:18:17.710 回答