2

对于单元测试,我想从“外部”替换一个函数。通常,我使用包装机制 - 但不幸的是,这不适用于从同一编译单元中调用函数。

我的想法是将功能标记为“弱”,以便我能够在测试应用程序中重新实现它。通常,这使用以下代码工作:

文件 myfunctions.c(这是正在测试的代码):

#include "myfunctions.h"
int weakFunction(int param) __attribute__((weak));

int weakFunction(int param)
{
  return 2*param;
}

int myfunction(int param)
{
  int result = weakFunction(param);
  return (result == (2*param)) ? 1:0;
}

文件 main.c

#include "myfunctions.h"
int weakFunction(int param)
{
  return 3*param;
}

int main()
{
  return myfunction(5);
}

此示例按预期工作 - 当我weakFunction从 main.c 中删除时,程序返回 1,当我添加weakFunction程序时返回 0。此时看起来不错。

但是,只要我如下更改 myfunctions.c 中的顺序,生成的程序就会因分段错误而崩溃:

文件 myfunctions.c(修改顺序):

#include "myfunctions.h"
int weakFunction(int param) __attribute__((weak));

int myfunction(int param)
{
  int result = weakFunction(param);
  return (result == (2*param)) ? 1:0;
}

int weakFunction(int param)
{
  return 2*param;
}

任何想法?坠机的原因可能是什么?

我在 Windows 7 上使用 GCC 4.8.1 (MinGW w64 build)。

谢谢你的帮助!弗洛里安

4

0 回答 0