大多数C库都提供功能选择宏,允许您指定所使用的接口版本。如果你设置
_POSIX_C_SOURCE
和
_XOPEN_SOURCE
在Linux或UNIX上包含任何系统标头之前,您的系统库将不会声明未来版本的UNIX可能定义的任何标识符。(理论上,单独设置其中一个应该就足够了,但同时设置这两个是很好的防御编码,因为这将防止一个或另一个被其他人不一致地设置。)
On Windows,
你会宣布
NTDDI_VERSION
和
_WIN32_WINNT
.
C标准库仅提供功能-
测试
宏,不是让你选择接口的宏,而是编译器支持的标志,如
-std=c20
,您应该在构建脚本中设置它。这应该会禁用将来添加到语言中的任何新关键字或标识符。
如果你依赖于某个特定版本的库,并且担心对其头文件的更改可能会破坏你的代码,你可以在项目树中放置一个头文件的副本(绝对可以肯定的是,库本身)。如果库是开源的,记下你使用的版本应该让其他人下载正确的版本。否则,你将任由其维护者摆布。
做
不
声明
_BSD_SOURCE
或
_GNU_SOURCE
如果这是你关心的问题!没有glibc绑定的Linux头文件,例如
<linux/module.h>
,通常没有这种版本控制。
一些语言对此有更强大的解决方案,例如
cabal
和
stack
对于Haskell或
cargo
对于Rust。