0

我将 a 存储char在一个long变量中并尝试使用printf.

long a = 'A';
printf("%c \n",a);

考虑到默认参数提升,参数被提升到,int但其long排名高于int不应提升(或实际降级)到int.

现在,如果它没有被提升为int,在 printf 语句中不存在类型不匹配,因为我们正在尝试使用 打印long变量%c。根据 C 标准,这种行为应该是未定义的,但编译器完美地打印A为输出,没有任何错误或警告。为什么会这样?

我正在研究 GCC 代码块编译器。

4

2 回答 2

2
于 2020-05-16T17:39:49.467 回答
0

'A' 的 ASCII 值被转换并存储为一个长数字,printf 函数将它转换回 char 就像 %c 一样,并打印回 'A'

实际上,“A”只是一个以标准化方式定义的数字,所以应该没有问题。

如我错了请纠正我。

于 2020-05-16T17:16:58.423 回答