【发布时间】:2012-01-18 16:02:19
【问题描述】:
我必须做一件可怕的事情,即在预编译时用不同数量的参数自动替换一个函数调用。 示例:
#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。
我已经尝试将以下内容添加到项目/项目构建选项/编译器设置/#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 开发人员资源”的一部分,Excel2010 XLL SDK)已经发展,现在使用对非标准函数的调用,例如 memcpy_s(),在 MinGW 中不可用。因此,在预处理器中,我将memcpy_s() 替换为memcpy(),以处理不同的参数。
【问题讨论】:
-
你能解释一下你为什么觉得你需要做这样的事情吗?
-
@VictorT.:我更新了我的问题,解释了背后的原因。
标签: excel build preprocessor project codeblocks