【问题标题】:Substitute a function with the preprocessor用预处理器替换函数
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2014-07-30
    • 2014-09-07
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多