【问题标题】:Changing preprocessed values during compile time在编译期间更改预处理值
【发布时间】:2016-02-11 11:04:03
【问题描述】:

我已经使用预处理器指令编写了一些代码来跳过一些要执行的语句。但是我在 main 中的 C 代码有兴趣更改以前的#defined 值并根据条件分配新值并更改预处理语句的结果在运行时也是如此。简而言之,我必须在运行时更改预处理语句。我该怎么做?

【问题讨论】:

  • 显示一些代码。你的问题不清楚。阅读C preprocessingcpp。您可能无法做您想做的事(因为 compile 时间和 run 时间不同,并且可能发生在具有 cross-compiling 的不同计算机上)。 改进您的问题(通过编辑),详细说明您的操作系统和系统

标签: c compilation macros c-preprocessor


【解决方案1】:

简而言之,我必须在运行时更改预处理语句

不可能。阅读C preprocessingcpp。编译时和运行时是不同的(编译后的代码甚至可以在不同的机器上运行,阅读更多关于cross-compiling)。如果使用GCC,请使用gcc -C -E foo.c > foo.ifoo.c 源文件预处理为foo.i 预处理形式(然后使用编辑器或页面查看生成的foo.i 内部)

也许您想在运行时加载额外的代码。这对于纯 C99 标准代码是不可能的。也许您的操作系统提供dynamic loading。 POSIX 指定dlopen。您可能还想使用JIT compiling 技术在运行时构造机器代码,例如使用 GCCJITasmjitGNU lightninglibjitLLVM、...等库

另请阅读homoiconic 语言。考虑使用 Common Lisp 进行编码(例如使用 SBCL)。

也许您想使用MELT 自定义您的GCC 编译器。

【讨论】:

  • 感谢您的聪明回答。所以我应该尝试不同的方式。:-)
【解决方案2】:

不可能。预处理发生在编译时间之前。

编译器只看到预处理器的结果,仅此而已。

【讨论】:

    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多