在编译期间更改预处理的值

时间:2016-02-11 11:04:04

标签: c compilation macros c-preprocessor

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

2 个答案:

答案 0 :(得分:2)

  

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

不可能。阅读C preprocessing& cpp。编译时和运行时是不同的(编译后的代码甚至可以在不同的机器上运行,请阅读有关cross-compiling的更多信息)。如果使用GCC,请使用gcc -C -E foo.c > foo.ifoo.c源文件预处理为foo.i预处理表单(然后使用编辑器或页面查看生成的foo.i $( "div.box" ).on( "swipe", swipeHandler ); function swipeHandler( event ){ $( event.target ).addClass( "swipe" ); } })

也许您想在运行时加载其他代码。纯C99标准代码无法做到这一点。也许您的操作系统提供dynamic loading。 POSIX指定dlopen。您可能还希望使用JIT compiling技术在运行时构造机器代码,例如使用GCCJITasmjitGNU lightninglibjitLLVM等图书馆,...

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

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

答案 1 :(得分:1)

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

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