一个define的问题.请大侠们帮忙!

cn2000 2008-02-21 01:50:51


#define funa( funb(a,b

期望达到的效果是,当有调用funa时,改成调用funb,并在前面多加两个参数.

因为有'(' 所以编译通不过,
有没有其他方式可以实现
funb的原形是void funb(CONST DWORD a_dwKindOfAppliTraces, void *a_pFunction,char *a_pcFormat,...);

谢谢各位.
...全文
1043 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2008-02-22
  • 打赏
  • 举报
回复
其实一楼的方法也是可行的

void funa(LPCTSTR file,UINT line, ...)
{
va_list ap;
va_start(ap;line);
funcb(file,line,ap);//funcb的原型必须改
}

cnzdgs 2008-02-22
  • 打赏
  • 举报
回复
原来LZ是想定义变参的宏啊,这样写:
#define funa(a_pcFormat,...) funb(0, NULL, a_pcFormat, __VA_ARGS__);

0和NULL是你打算要加的参数。
这行代码在VS2005中可以用,VC6应该不行,其它版本不清楚。
oakfire 2008-02-21
  • 打赏
  • 举报
回复
不用define 直接
void funa(...)
{
funb(a, b, ...);
}
cn2000 2008-02-21
  • 打赏
  • 举报
回复
我就是嫌这样复杂,需要局部变量,我想能过宏的方式实现.
如果要用函数,就不成问题了.呵呵 .
我总觉得应该能实现,只是我对DEFINE的语法不熟悉...
  • 打赏
  • 举报
回复
你该不会原封不动的拿过去了吧, ...表示你自己要设置的参数,
你得按照你实际情况写上去.
cn2000 2008-02-21
  • 打赏
  • 举报
回复
1楼的编译不过
china_bai 2008-02-21
  • 打赏
  • 举报
回复
支持1楼的方法,简洁易懂。
superarhow 2008-02-21
  • 打赏
  • 举报
回复
用模板可以实现:
void funb(int a, int b, ...)
{
}

template<typename _t1>
void funa(_t1 v1)
{
funb(1, 2, v1);
}

template<typename _t1, typename _t2>
void funa(_t1 v1, _t2 v2)
{
funb(1, 2, v1, v2);
}

template<typename _t1, typename _t2, typename _t3>
void funa(_t1 v1, _t2 v2, _t3 v3)
{
funb(1, 2, v1, v2, v3);
}
  • 打赏
  • 举报
回复
1楼的方法好
cnzdgs 2008-02-21
  • 打赏
  • 举报
回复
#define funa(a_pcFormat) funb(0, NULL, a_pcFormat)
zhoujianhei 2008-02-21
  • 打赏
  • 举报
回复
void func(...)
{
funb(a, b, ...);
}

#define funa func

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧