我想知道在C中将ascii字符(如TAB、BEL和ESC )直接放在字符串文本中是否合法。
这里无法在Stackoverflow上以纯文本显示字符,所以我不得不用屏幕截图代替。

没有图形表示的字符将使用卡雷特表示法显示,并在屏幕截图中以紫色高亮显示。在行TAB-character中也有缩进文本的7。
使用gcc -std=c99 -pedantic编译时没有任何警告,但是它真的是完全可移植的吗?
我不会在任何严肃的节目中用到这一点。我只是好奇,如果标准允许的话。
发布于 2015-02-12 20:34:19
可以在程序源代码中转接的可移植字符如下:
资料来源:C标准,任何版本。
实现必须接受这些字符,并且允许接受任何其他字符。
发布于 2015-02-12 20:46:37
如果反斜杠立即出现在文字换行符(而不是\n)前面,则反斜杠和换行符都会被移除。除了在三角图之间,行可以像其他地方一样被分割(如果一个三角图被反斜杠-换行符序列分割,则该序列被移除,但三角图保持不变)。
在字符串文本中(在可移植代码中)允许使用文字制表符,并且具有与\t相同的语义。C11 (n1570) 6.4.5 p1声明,“除双引号"、反斜杠\或新行字符之外的源字符集的任何成员”都可以是字符串文字的一部分,制表符字符是源字符集的一部分(同上)。5.2.1 p3)。
转义字符(\e,ASCI0x1b)不是源字符集的一部分,甚至可能根本不存在(在非ASCII系统上)。表单提要也是如此,尽管\f是C标准的一部分。这些字符不能移植使用。
实现可以自由地接受它喜欢的任何字符(除了标准的最低要求之外),从源字符集到执行字符集的映射是实现定义的(实现可以将源代码中的不同字符映射到相同的字符)。
发布于 2015-02-12 19:33:19
一个以空结尾的字符串只是一个8位值的数字,根据它们的签名性,这些值可以是0-255或-128-127。
当你把你的字节发送到像一个终端一样的东西,这一切都取决于终端如何处理这些字节。像'a'-'z‘这样的字节可能是标准的,但前提是您假设了8位字符编码。其他字节,如‘欧元’,可能只能正确地显示正确的字符集。
最后,我们有那些终端控制字节来控制光标和铃声。处理这些字节完全取决于终端,但是编写它们仍然是有效的C代码。
https://stackoverflow.com/questions/28485801
复制相似问题