【发布时间】:2023-04-01 13:55:01
【问题描述】:
是否有一个跨平台(即,跨 Linux、BSD 和 OS X,理想情况下是所有 POSIX)我可以完全基于字符串 "O_RDWR" 以编程方式访问像 O_RDWR 这样的常量?我正在编写一些(非 C)代码,这些代码与跨平台的 C 函数互操作,并且需要使用正确的参数调用例如 open(2) - 但我无法保证本地系统将其常量设置为什么。
我实际上是在寻找类似get_constant_value("O_RDWR") -> "02" 的东西。
编辑: 我目前有一个非常讨厌的 hack:直接调用预处理器并检查输出。
printf "#include <fcntl.h>\nO_RDWR" | cpp | tail -n 1
【问题讨论】:
-
这通常通过在您感兴趣的每个目标平台上编译一些 C 代码来完成,将整数文字映射到字符串,然后进行某种查找。例如,Python 在
osmodule 中有这些常量,它们是通过posixmodule.c中的posix模块定义的(查看第8992 行)。
标签: c cross-platform c-preprocessor