C String Literal必需的转义字符

And*_*zos 3 c string escaping

我有一个零终止字符串:

char* s = ...;
Run Code Online (Sandbox Code Playgroud)

我正在生成C源代码(在运行时),我想输出一个表示s的字符串文字,它将在生成的C程序中生成与s相同的字符串.

我使用的算法是:

Output "

Foreach char c in s
    if c == " output \"
    else if c == \ output \\
    else output c

Output "
Run Code Online (Sandbox Code Playgroud)

除了"和之外我还需要特殊待遇\吗?

Mar*_*ers 7

  • 必须编码",\,\r\n\0(和\?迈克尔·伯尔提到).如果不这样做将破坏您的代码.
  • 应该使用十六进制转义码对非ASCII字符进行编码,例如\x80.如果源代码中包含非ASCII字符,则为实现定义.对这些字符进行编码失败将适用于某些编译器,但它可能会破坏其他编译器.
  • 可以编码ASCII不可打印的字符.这将提高生成的源代码的可读性,如果你使用的转义码字符一样\t,\b,\x05,等等.如果你不这样做,你的代码仍然可以工作,但它可能是难以阅读.
  • 不需要'在双引号字符串内转义.它是合法的,但它是不必要的,它不会使源代码更具可读性.