我目前正在学习C,如果这个问题看似简单或新手,那么你就知道原因了。
阅读 printf 的man page我发现
不产生进一步的输出
此刻之前,我从未见过和听说过 \ c 。所以我决定在一个简单的hello world程序中尝试一下:
printf("\nHello World\n\n\c");
结果,gcc给了我这个警告:
警告:未知的转义序列:' \ c' [默认启用]
这对我来说听起来很奇怪,所以我进一步调查:我去了Wikipedia并且 \ c 没有列出作为一个转义序列...因此我尝试在网上搜索,这里堆栈溢出。我发现this topic和this one中讨论的 \ c (实际上是两个)的引用很少(我认为后者)并不是真的与C有关,但似乎我们正在谈论"相同的 \ c ",阅读给出的描述)。 有人能帮助我理解这件事吗?
答案 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]