【问题标题】:Cross-platform access to C constants跨平台访问 C 常量
【发布时间】: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 在os module 中有这些常量,它们是通过posixmodule.c 中的posix 模块定义的(查看第8992 行)。

标签: c cross-platform c-preprocessor


【解决方案1】:

不,没有像今天这样的东西。在 C# 中,这称为反射。有传言称 C++ 委员会讨论了 C++14 的反射。一旦它被采用,那么在 1-3 年内你可以期望它会在编译器中得到支持。

如果您需要的常量数量有限,您可能需要编写自定义代码来进行翻译。

【讨论】:

    猜你喜欢
    • 2018-09-28
    • 2010-09-06
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    相关资源
    最近更新 更多