用预处理器replace一个函数
我必须做一个可怕的事情 ,即在预编译时自动用一个不同的函数调用,用不同数量的参数replace一个函数调用。 例:
#include <iostream> int FuncToChange(void* a, int b, void* c, int d) { return 0; } int NewFunc(void* a, void* c, int d) { return 1; } #define FuncToChange($1, $2, $3, $4) NewFunc($1, $3, $4) int main() { int a = 1, b = 2, c = 256; int v = FuncToChange(&a + 1, c + 1, &b, 2*c); }
这个代码工作,即在main()
NewFunc()
而不是FuncToChange()
。
现在我想删除#define(原因是我不能修改代码 ),并获得相同的结果设置IDE的构build选项。
IDE是CodeBlocks 10.05。
我已经尝试添加以下内容到项目/项目构build选项/编译器设置/#定义:
NewFunc($1, $3, $4)=FuncToChange($1, $2, $3, $4)
但没有任何改变。 有人有什么想法吗?
先谢谢你!
彼得罗
平台 :
GCC / MinGW的
Windows7 64位
这个问题背后的原因:
我必须将XP插件中的Excel插件移植到Windows 7 64位。 该插件是用CodeBlocks开发的,我不能更改工具集。 文件FRAMEWRK.C(“2010 Office System Developer Resources”,Excel2010 XLL SDK的一部分)已经发展,现在使用对非标准函数(如memcpy_s()
调用,在MinGW中不可用。 所以,在预处理器中,我将memcpy_s()
replace为memcpy()
,负责处理不同的参数。
好。 我将#define
移动到了自己的包含文件中。 然后我用-include
命令行选项将它指定给GCC。
这样做,文件被包含在每个源文件的顶部。