\ c转义序列在man中列出但在C中未知

时间:2016-01-20 19:36:56

标签: c escaping printf gcc-warning

我目前正在学习C,如果这个问题看似简单或新手,那么你就知道原因了。

阅读 printf man page我发现 列为转义序列。它的描述是

  

不产生进一步的输出

此刻之前,我从未见过和听说过 \ c 。所以我决定在一个简单的hello world程序中尝试一下:

printf("\nHello World\n\n\c");

结果,gcc给了我这个警告:

  

警告:未知的转义序列:' \ c' [默认启用]

这对我来说听起来很奇怪,所以我进一步调查:我去了Wikipedia并且 \ c 没有列出作为一个转义序列...因此我尝试在网上搜索,这里堆栈溢出。我发现this topicthis one中讨论的 \ c (实际上是两个)的引用很少(我认为后者)并不是真的与C有关,但似乎我们正在谈论"相同的 \ c ",阅读给出的描述)。 有人能帮助我理解这件事吗?

1 个答案:

答案 0 :(得分:6)

正在阅读正确的手册页。你所看到的是:man 1 printf,它是关于shell命令printf,而不是C标准函数printf。

使用:

 man 3 printf

阅读有关C库函数的内容。 \c不在C中,因此printf(3)无法识别它。

您正在查看的printf(1)确实可以正常工作。

$ /usr/bin/printf "ABC\chi"

产生

ABC

请注意,Linux手册页一般也可能有其他非标准扩展(特定于Linux或glibc)和POSIX扩展等。非标准扩展通常会记录在案,但很容易遗漏。因此,如果您正在寻找C标准所说的内容,那么您应该查看C标准。这是online draft

如果您想知道传递给man号码是什么,那么它就是部分号码。 3对应于库函数。您可以在man man找到详细信息。 以下是各部分的摘要:

   1   Executable programs or shell commands
   2   System calls (functions provided by the kernel)
   3   Library calls (functions within program libraries)
   4   Special files (usually found in /dev)
   5   File formats and conventions eg /etc/passwd
   6   Games
   7   Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
   8   System administration commands (usually only for root)
   9   Kernel routines [Non standard]