我正在研究一个 C 数学库,它使用宏来完成大部分工作,我现在面临一个问题。
这是宏的样子:
the_macro(a, b, c)
宏本身会执行以下操作:
(a - b > 0) ? error_function : 1
error_function 用于在编译时停止用户,因此如果(a - b > 0)
is true
,则宏将扩展为没有定义的函数。所以这会导致链接错误。
一切似乎都很好,但今天我的老板告诉我我们需要做一些单元测试,所以我写了一个包装宏的函数:
int my_func(int a, int b, int c)
{
return the_macro(a, b, c);
}
问题来了,代码不能传递链接,因为如果我使用var而不是常量来调用the_macro,这些error_functions
都会在.o
文件中,因为int a, int b, int c
在运行时都是已知的,所以我只能调用宏函数带常量:the_macro(2, 3, 4)
有什么办法可以避免这种情况?还是有更好的解决方案来对此宏进行单元测试?
编辑:
我正在处理的代码是机密的......但我做了一个例子来说明这个问题:
#include <stdio.h>
#define the_macro(a, b)\
(a > b)?error_function():1
// Comment out my_func(), then the program will run normaly
// But if you don't comment it out, the linkage error will come out.
void my_func(int a, int b)
{
the_macro(a, b);
}
int main()
{
printf("%d\n", the_macro(1, 10));
return 0;
}
我正在使用 gcc-4