gpt4 book ai didi

c - 这些奇怪的问号是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 14:54:04 25 4
gpt4 key购买 nike

我遇到了一些看起来很奇怪的代码。它甚至看起来都不像 C,但令我惊讶的是它可以在我的 C 编译器上编译和运行。这是对 C 语言的一些非标准扩展吗?如果是,原因是什么?

??=include <stdio.h>

int main()
??<
const char arr[] =
??<
0xF0 ??! 0x0F,
??-0x00,
0xAA ??' 0x55
??>;

for(int i=0; i<sizeof(arr)/sizeof(*arr); i++)
??<
printf("%X??/n", (unsigned char)arr??(i??));
??>

return 0;
??>

输出:

FF
FF
FF

最佳答案

代码完全符合任何版本的 C 标准。 ?? 机制被称为 trigraphs 并被引入到 C 中以允许以替代方式打印某些符号。看起来该程序是作为各种三字母序列的演示而编写的。

过去,许多计算机及其键盘都基于一个名为 ISO 646 的旧符号表。其中不包含 C 语言中使用的所有符号,例如 \{ } [ ]。这使得一些国家的程序员甚至无法编写 C,因为他们国家的键盘布局缺少必要的符号。没有重新制作键盘和符号表,而是更改了 C 语言。

因此引入了三字母。今天,它们被认为是一个完全过时的功能,不建议使用它们。例如,如果你使用它们,GCC 会给你一个警告。尽管如此,它们仍保留在 C 标准中以实现向后兼容性,所有 C 编译器都必须支持它们。

现有的三字母序列是(C11 5.2.1.1 三字母序列):

??=  #
??( [
??/ \
??) ]
??' ^
??< {
??! |
??> }
??- ~

左栏是三字母序列,右栏是它的含义。

关于c - 这些奇怪的问号是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23825603/

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