在llvm字符串中真正是\ 0A \ 00

时间:2013-02-05 14:57:49

标签: llvm

我只是llvm汇编的初学者,我想问问题 我不确定的一切。

我只是看着你好世界节目 和@str =内部常量[13 x i8] c“hello world \ 0A \ 00”

我不明白后缀是什么意思 \ 0A \ 00我试着阅读它,结果没有输出换行符 然而,如果我只有\ 0A,换行回来......我觉得\ 00是没用的...... 这是真的吗?

1 个答案:

答案 0 :(得分:3)

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

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

换句话说,您看到的字符串相当于C中的"hello world\n"

注意:虽然 可以使用非空终止字符串,但它非常不健康,并且很多内置字符串操作都会有undefined behavior。不要省略空终止。