用于非可打印/控制字符常量的C标准头文件



所以,每当我需要引用某些ASCII控制字符时,我发现自己在做这样的垃圾:

#define STX 2
#define ETX 3

在大多数开发环境中(可能是LINUX)是否有一些C头文件为我定义这些常量,以便我不必使用幻数或一直定义它们?比如<stdint.h>.

我写了35年的C代码,从来没有遇到过这样的头文件。

我能给你的最好的我的头:

1。使用Linux文档项目的管理页源代码

该文件可能存在于您的机器上的某个地方;我使用的路径是你可以在Debian/Ubuntu安装中找到的。该列表只包括C0代码,但也许这已经足够好了:

$ gunzip -c /usr/share/man/man7/ascii.7.gz |
>   awk '$1~/0[0-3][0-7]/{printf "#define C0_%-3s %2dn", $4, $2}'
#define C0_NUL  0
#define C0_SOH  1
#define C0_STX  2
#define C0_ETX  3
#define C0_EOT  4
#define C0_ENQ  5
#define C0_ACK  6
#define C0_BEL  7
#define C0_BS   8
#define C0_HT   9
#define C0_LF  10
#define C0_VT  11
#define C0_FF  12
#define C0_CR  13
#define C0_SO  14
#define C0_SI  15
#define C0_DLE 16
#define C0_DC1 17
#define C0_DC2 18
#define C0_DC3 19
#define C0_DC4 20
#define C0_NAK 21
#define C0_SYN 22
#define C0_ETB 23
#define C0_CAN 24
#define C0_EM  25
#define C0_SUB 26
#define C0_ESC 27
#define C0_FS  28
#define C0_GS  29
#define C0_RS  30
#define C0_US  31

2。使用Unicode字符数据库。

这包括更多,有很多Unicode控制字符,其中一些在星光层,尽管显然你可以过滤它。它还包括一些额外的缩写名称。文件NamedAliases.txt可以从https://www.unicode.org/Public/14.0.0/ucd/NameAliases.txt下载,或者您可以在https://www.unicode.org/Public/zipped/14.0.0/

上获取整个UCD作为压缩归档文件。我将输出截断为60行;整个列表有353行。

awk -F; '$3=="abbreviation"
{printf "#define CTL_%-8s 0x%sn", $2, $1}'  
UCD/NameAliases.txt
#define CTL_NUL      0x0000
#define CTL_SOH      0x0001
#define CTL_STX      0x0002
#define CTL_ETX      0x0003
#define CTL_EOT      0x0004
#define CTL_ENQ      0x0005
#define CTL_ACK      0x0006
#define CTL_BEL      0x0007
#define CTL_BS       0x0008
#define CTL_HT       0x0009
#define CTL_TAB      0x0009
#define CTL_LF       0x000A
#define CTL_NL       0x000A
#define CTL_EOL      0x000A
#define CTL_VT       0x000B
#define CTL_FF       0x000C
#define CTL_CR       0x000D
#define CTL_SO       0x000E
#define CTL_SI       0x000F
#define CTL_DLE      0x0010
#define CTL_DC1      0x0011
#define CTL_DC2      0x0012
#define CTL_DC3      0x0013
#define CTL_DC4      0x0014
#define CTL_NAK      0x0015
#define CTL_SYN      0x0016
#define CTL_ETB      0x0017
#define CTL_CAN      0x0018
#define CTL_EOM      0x0019
#define CTL_SUB      0x001A
#define CTL_ESC      0x001B
#define CTL_FS       0x001C
#define CTL_GS       0x001D
#define CTL_RS       0x001E
#define CTL_US       0x001F
#define CTL_SP       0x0020
#define CTL_DEL      0x007F
#define CTL_PAD      0x0080
#define CTL_HOP      0x0081
#define CTL_BPH      0x0082
#define CTL_NBH      0x0083
#define CTL_IND      0x0084
#define CTL_NEL      0x0085
#define CTL_SSA      0x0086
#define CTL_ESA      0x0087
#define CTL_HTS      0x0088
#define CTL_HTJ      0x0089
#define CTL_VTS      0x008A
#define CTL_PLD      0x008B
#define CTL_PLU      0x008C
#define CTL_RI       0x008D
#define CTL_SS2      0x008E
#define CTL_SS3      0x008F
#define CTL_DCS      0x0090
#define CTL_PU1      0x0091
#define CTL_PU2      0x0092
#define CTL_STS      0x0093
#define CTL_CCH      0x0094
#define CTL_MW       0x0095
#define CTL_SPA      0x0096
...

最新更新