代码之家  ›  专栏  ›  技术社区  ›  rwallace

未使用的名称

  •  2
  • rwallace  · 技术社区  · 3 年前

    C语言有一组完全保留的关键字。然而,有一组更大的标识符是保留的或半保留的,至少强烈不建议使用,因为它们被标准库或各种系统头文件使用,或者将来可能会被使用,等等;这里有一个全面但并不详尽的清单: https://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html

    这组名称太大,无法一一列举。

    从使用C作为编译目标的角度来看,我正在寻找相反的东西:一组我可以生成的名称,保证 保留,可供应用程序免费使用。

    显然,只要在每个名称前添加UUID,就可以有效地满足这一要求,但还有一个额外的要求,即生成的代码应尽可能易于眼球调试,因此名称空间应尽可能简单,例如,如果所有名称都有一个共同的前缀,则前缀应尽可能短。

    描述一组保证或极有可能免费供应用程序使用的名称的最简单方法是什么?例如,使用前缀为的任意名称是否安全 x_ 或者类似的?

    0 回复  |  直到 3 年前
        1
  •  1
  •   Davislor    3 年前

    大多数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。