C编译器编译的C源代码中可以使用static_cast吗?

Can static_cast be used in C source code compiled by C compiler?

我看到 C 库的代码由 GCC 11 编译,static_cast 来自 C 代码,它非常适合 GCC。

但是当我尝试在 VisualStudio (MSVC) 中编译这个库时出现错误:(这个库可以用旧的 VS2019 编译(2021 年之前的更新))

fatal error C1189: #error: STL1003: Unexpected compiler, expected C++ compiler.

我只在那儿看到评论https://github.com/ofiwg/libfabric/issues/7041#issuecomment-914839351

Hi! STL maintainer here. We made this change very recently in microsoft/STL#2148 which forbids including standard library headers from C programs.

可能我误会了什么,很困惑。

static_cast 是 C++ 语言的一部分,更重要的是它是 而不是 C 语言的一部分,因此尝试使用 static_cast<> 应该会导致一个 C 编译器发出 compile-time 错误。

如果您已经看到它在“C 源代码”中成功使用了……一种可能的解释是“C 源”代码被 C++ 编译器编译为 C++ 源代码。由于 C++ 99% backwards-compatible 是 C,大多数 C 源代码可以编译为 C++ 源代码并且可以工作,在这种情况下,static_cast 可以成为代码的一部分并且可以编译。

另一种可能性是,编译器供应商有点草率,错误地允许执行一些特定于 C++ 的功能,即使在以 C 编译器的角色进行编译时也是如此,但希望情况并非如此。