c语言中"literal" '1'的定义是什么?



我想知道c语言中字符/文字'1'的定义。或者更一般地定义'x',其中latex{xinN}(是自然数0、1、2、3、4、5、6,等等)

我写这篇文章是想弄清楚,但我想要一个"权威的"。定义。或者更好的是如何/在哪里找到这个"权威的";定义。这是c标准吗?还是依赖于编译器?还是别的什么?

#include <stdio.h>
int main(void) {
printf("test###_%c_###testn", '');
printf("test###_%c_###testn", '1');
printf("test###_%c_###testn", '2');
printf("test###_%c_###testn", '3');
printf("test###_123_###testn");
// printf("tetest###__###testn"); ###this will cause a compiler warning
return 0;
}

注:编译gcc版本:gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0没有特殊选项(即gcc test.c)

程序输出如下内容:

test###__###test
test###__###test
test###__###test
test###__###test
test###__###test

我知道''是空字符,所以这对我来说是有意义的。但接下来的几行似乎也被视为"空字符"。但事实并非如此。更准确地说,他们似乎只是被忽视了。它们不像空字符那样表示字符串的结束。例如,取消对printf格式字符串中带有''的行的注释,并忽略编译器错误,将在test###_处停止行打印,这是有意义的,因为它是"end"字符串的。但是如果''被'传递',则会被忽略。到格式字符串中?我是否需要更多地研究printf的实现细节来理解这种""行为?

对不起,我知道这是几个问题。如果我能把我的问题说得更清楚或解释得更多,请告诉我。

我试了其他"字符"。像'a'一样得到相同的结果,这是因为这些"转义"字符是"未知/未定义",与"n"或其他东西相比?

后跟0到7之间最多三位数字的序列,表示字符的八进制码。

所以的值是0,1的值是1,10的值是8。假设采用ASCII编码,小于32的值为控制字符。

这些是带有八进制转义序列的整数字符常量。来自C标准(6.4.4.4字符常量)

octal-escape-sequence:
 octal-digit
 octal-digit octal-digit
 octal-digit octal-digit octal-digit

octal-digit: one of
0 1 2 3 4 5 6 7

x开头的十六进制转义序列

hexadecimal-escape-sequence:
x hexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit

例如,'17''xf'相同,它们都表示十进制数15

最新更新