C17代码可以解释为C23代码吗?如果不是,有哪些突破性的变化?

推荐答案

不,C23不是fully向后兼容的.并不是所有的C17程序都可以编译为C23程序.

在其他重大更改中,C23引入了新的关键字和声明说明符.使用这些标识符的C17程序不能解释为C23程序.

例如,以下所有内容在C17程序中都有效,但在C23程序中无效.

int* nullptr = 0;
int true = 1;
int bool = 0;
int constexpr = 1;
void static_assert() { /* ... */ }

更危险的是,以下代码在C17和C23中具有不同的含义(尽管它不太可能出现在C17程序中):

auto d = 1.5;

关于C23重大变化的更完整的说明,见Annex M.2 of N3096(C23的最新工作草案,2023-04-01).

C++相关问答推荐

为什么这个C程序代码会产生以下结果?

GCC预处理宏和#杂注GCC展开

将fget()与strcMP()一起使用不是正确的比较

仅在给定的大小和对齐方式下正确创建全局

为什么sscanf不能正确地从这个字符串格式中提取所有数字?

我的程序在收到SIGUSR1信号以从PAUSE()继续程序时总是崩溃()

什么是.c.h文件?

为什么数组的最后一个元素丢失了?

For循环中的变量行为不符合预期.[C17]

如何用C语言为CLI应用程序编写按键检测系统?

C标准关于外部常量的说明

Valgrind用net_pton()抱怨

如何修复我的qsort()算法?它每次都给出不同的结果

STM32 FATFS用户手册(Um1721)中的代码正确吗?

在我的第一个C语言中观察到的错误';你好世界';程序

通过char*访问指针的对象表示是未定义的行为吗?

使用 _Atomic float 时,MSVC 编译的代码会命中调试断言

如何在C中以0x格式打印十六进制值

我如何(合规地)从 tmpfile() 读取?

strided memcpy(3) 在 libvpx 中如何工作