宏定义中元素类型的有关问题

宏定义中元素类型的问题
有如下宏:
#define   MULTI_FUNCTIONAL(exp,   test,   result)   {         \
const   double   expVal=(exp);                                               \
const   double   testVal=(test);                                           \
const   double   resultVal=(result);                                   \

if   (resultVal==testVal)   ...   ...   (省略)

结果发现exp,   test,   result的值不仅仅可以是double类型的,也可以是char,   int各种类型的值。怎么定义这里的expVal,   testVal和resultVal呢?

请指教一下,谢谢!

------解决方案--------------------
如果是gcc,可以使用typeof(exp) const expVal = (exp);
如果不是gcc,可以使用宏转调inline的template函数自动推导类型。
不要在“宏”上吊死。