对于单元测试,我想从“外部”替换一个函数。通常,我使用包装机制 - 但不幸的是,这不适用于从同一编译单元中调用函数。
我的想法是将功能标记为“弱”,以便我能够在测试应用程序中重新实现它。通常,这使用以下代码工作:
文件 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)。
谢谢你的帮助!弗洛里安