用预处理器替换函数

时间:2012-01-18 16:02:19

标签: excel build preprocessor project codeblocks

我必须做一个可怕的事情,即在预编译时自动用不同的函数调用替换具有不同数量参数的函数调用。 例如:

#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构建选项的相同结果。

IDE CodeBlocks 10.05。

我已经尝试将以下内容添加到Project / Project Build Options / Compiler Settings / #define:

NewFunc($1, $3, $4)=FuncToChange($1, $2, $3, $4)

但没有改变。有人有任何想法吗?

提前谢谢!

彼得

平台 的:
GCC / MinGW的
Windows7 64位


这个问题背后的原因:

我必须将Excel插件从XP 32位移植到Windows 7 64位。该插件是使用CodeBlocks开发的,我无法更改工具集。文件FRAMEWRK.C(“2010 Office System Developer Resources”,Excel2010 XLL SDK的一部分)已经发展,现在使用调用非标准函数,如memcpy_s(),这在MinGW中不可用。因此,使用预处理器,我将memcpy_s()替换为memcpy(),并处理不同的参数。

1 个答案:

答案 0 :(得分:3)

确定。我将#define移到了自己的包含文件中。然后我使用-include命令行选项将其指定给GCC 这样做,该文件包含在每个源文件的顶部。