繁体   English   中英

字符串文字中使用哪些字符合法?

[英]What characters are legal to use in string literals?

我想知道,如果它是合法的在C 硬是ascii字符,如TABBELESC直接在一个字符串。

在Stackoverflow上无法以纯文本显示字符,因此我不得不截取屏幕截图。

例

没有图形表示的字符使用插入符号表示,并在屏幕截图中以紫色突出显示。 7行还有一个TAB字符,用于缩进文本。

使用gcc -std=c99 -pedantic编译时不会发出任何警告,但是它真的可以完全移植吗?

这不是我要用于任何严肃程序的东西。 我只是好奇标准是否允许它。

可以在程序源代码中出现的可移植字符就是这些:

  • 拉丁字母的26个大写字母

     ABCDEFGHIJKLM NOPQRSTUVWXYZ 
  • 拉丁字母的26个小写字母

     abcdefghijklm nopqrstuvwxyz 

    10个十进制数字

     0 1 2 3 4 5 6 7 8 9 
  • 以下29个图形字符

     ! " # % & ' ( ) * + , - . / : ; < = > ? [ \\ ] ^ _ { | } ~ 
  • 空格字符和代表水平制表符,垂直制表符和换页符的控制字符。

资料来源:C标准,任何版本。

实现必须接受这些字符,并且允许接受任何其他字符。

如果反斜杠立即在文字换行符(不是\\n )之前,则反斜杠和换行符都将被删除。 线可以像在三边形之间除在任何地方一样进行拆分(如果三边形被反斜杠-换行符序列分割,则该序列将被删除,但三边形保持不变)。

字符串文字(在可移植代码中)允许使用文字制表符,并且语义与\\t相同。 C11(n1570)6.4.5 p1指出,“源字符集的任何成员(双引号除外" ,反斜杠\\或换行符除外)都可以是字符串文字的一部分,而制表符则是源字符集(同上,5.2.1 p3)。

转义字符( \\e ,ASCII 0x1b)不是源字符集的一部分,甚至可能根本不存在(在非ASCII系统上)。 尽管\\f是C标准的一部分,但对于换页也是如此。 这些字符不能随便使用。

一个实现可以自由接受它喜欢的任何字符(除了标准的最低要求),从源字符集到执行字符集的映射是实现定义的(一个实现可以将源代码中的不同字符映射为相等)。字符)。

以空值结尾的字符串只是一些8位值,根据其有符号性,它们可以是0-255或-128-127。

当您将字节发送到类似终端的内容时,完全取决于终端如何处理字节。 某些像“ a”-“ z”的字节可能是标准字节,但前提是您假设使用8位字符编码。 诸如“€”之类的其他字节可能只能使用正确的字符集正确显示。

最终,我们有了那些终端控制字节来控制光标和响铃。 最终由终端来处理这些字节,但是写入它们仍然是有效的C代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM