私は llvm アセンブリの初心者であり、不明な点はすべて質問するのが好きです。
私はちょうど hello world プログラムと @str = 内部定数 [13 x i8] c"hello world\0A\00" を見ていました。
サフィックス \0A\00 の意味がわかりません。読み込もうとしたところ、出力に改行がありませんでしたが、\0A があると改行が戻ってきます... \00 のように感じますもったいない・・・本当ですか?
私は llvm アセンブリの初心者であり、不明な点はすべて質問するのが好きです。
私はちょうど hello world プログラムと @str = 内部定数 [13 x i8] c"hello world\0A\00" を見ていました。
サフィックス \0A\00 の意味がわかりません。読み込もうとしたところ、出力に改行がありませんでしたが、\0A があると改行が戻ってきます... \00 のように感じますもったいない・・・本当ですか?
LLVM IR 構文では、バックスラッシュの後に 2 つの 16 進文字が続く場合、そのASCII 値が 2 つの文字によって定義されたものと同じである文字を意味します。
この場合、文字はインデックス 10 (0xA) (改行) とインデックス 0 (「null」と呼ばれ、多くの異なるシステムで文字列を終了するために使用される) の文字です。C ライン言語では、これらは代わりに\n
and \0
(または単に 0)として記述され\0
、C のリテラル文字列の末尾に暗黙的に追加されます (LLVM IR ではそうではありません)。
"hello world\n"
つまり、表示される文字列は Cと同等です。
注: null で終わらない文字列を操作することは可能ですが、非常に不健全であり、組み込みの文字列操作の多くはそれらに対して未定義の動作をします。null 終端を省略しないでください。