不,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).