对于单元测试,我想在"外部"中替换一个功能。通常,我使用包装机制 - 但不幸的是,这不适用于从同一编译单元内调用该函数。
我的想法是将功能标记为"弱"所以我能够在测试应用程序中重新实现它。通常,这可以使用以下代码:
文件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);
}
此示例按预期工作 - 当我从main.c中删除weakFunction
时,程序返回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)。
感谢您的帮助! 弗洛里安