gpt4 book ai didi

c - 转义的多字符常量警告\t

转载 作者:行者123 更新时间:2023-11-30 20:50:26 25 4
gpt4 key购买 nike

如果我在尝试打印 "\t" 而不是实际的制表符时编写 putchar('\\t'); ,我会收到多字符常量警告。另一方面,如果我写 putchar('\\'); 我不会收到警告。查看ASCII表,没有字符'\\',只有'\'。那么为什么没有警告呢?为什么 '\\' 是一个字符,而 '\\t' 却不止一个?反斜杠只能用于转义后面的一个字符吗?

最佳答案

无法通过一次 putchar 调用打印 \t,因为 putchar > 将一个且仅一个字符放入标准输出中。使用2:

putchar('\\');
putchar('t');

另一种选择是将字符串 "\\t"fputs一起使用:

fputs("\\t", stdout);
<小时/>

'\\' 不会出现警告,因为这是输入字符 \ 的字 rune 字的一种方式。在 ASCII 上,这与 '\134''\x5c' 同义。

来自C11 6.4.4.4第 2 段和第 4 段:

2

An integer character constant is a sequence of one or more multibyte characters enclosed in single-quotes, as in 'x'. [...] With a few exceptions detailed later, the elements of the sequence are any members of the source character set; they are mapped in an implementation-defined manner to members of the execution character set.

[...]

4

The double-quote " and question-mark ? are representable either by themselves or by the escape sequences \" and \?, respectively, but the single-quote ' and the backslash \ shall be represented, respectively, by the escape sequences \' and \\.

<小时/>

您收到警告的原因是该行为完全是实现定义的。在 C11 J.3.4以下被列为实现定义的行为:

The value of an integer character constant containing more than one character or containing a character or escape sequence that does not map to a single-byte execution character (6.4.4.4).

由于 '\\' 包含映射到单字节执行字符 \ 的转义序列,因此不存在实现定义的陷阱,也没有什么可警告的;但 \\t 包含 2 个字符:\t,并且它不会执行您想要的可移植操作。

关于c - 转义的多字符常量警告\t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45270395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com