条件编译可以出现在函数的入口参数中吗?
如:
#define _A_int add(int a,int b,int c)
{
return (a+b+c);
}void main()
{
add(1,
#ifdef _A_
2,
#else
3,
#endif
4)
}请问在vc6.0下可以编译通过吗?
如:
#define _A_int add(int a,int b,int c)
{
return (a+b+c);
}void main()
{
add(1,
#ifdef _A_
2,
#else
3,
#endif
4)
}请问在vc6.0下可以编译通过吗?
解决方案 »
- 跪求大侠进来看看 创建非模态对话框时 弹出的是一个灰白窗体
- 求助:关于处理鼠标按下和弹起的消息
- ODBC或者是DAO,ACCESS向ORACLE数据迁移
- 请问用那个windows api可以获得和调节mic的音量
- 怎么样在多文档的TOOLBAR中处理自画控件?
- 三个帖子还没有解决的简单的老问题,谁能帮我实现这样的mdi界面,该界面的图片放在我的邮箱中[email protected],m密码是123456,谢谢!在线
- 如何用Sendto()函数传送一个文件??
- 菜鸟第一步:我写了一个CDib的类,但编译的时候出现以下错误unresolved external symbol ……各位大虾能帮一下我么?
- 关于工件表面无损检测的步骤问题
- 怎样使控件的选中状态无关?
- [国庆节快乐!!]第一次散分
- 怎么访问共享文件夹,散分分题,有没有解决没有关系,明天就结贴!
如果是可变参数且是宏定义呢?
如:#define _A_
#define ADD(a) add_func a;int add_func(int a,...)
{
}void main()
{
ADD((1,
#ifdef _A_
2,
#else
3,
#endif
4));
}这样可以编译通过吗?
#define _A_#define ADD(a,b,c) add_func(a,b,c)int add(int a,int b,int c)
{
return (a+b+c);
}void main()
{
ADD(1,
#ifdef _A_
2,
#else
3,
#endif
4);
}在vc6.0可以通过吗?
ADD(1,2,4);
#else
ADD(1,3,4);
#endif程序的可读性增强了
可是如果这样呢ADD(
#ifdef _A_
1,
#else
2,
#endif
#ifdef _B_
3,
#else
4,
#endif
#ifdef _C_
5
#else
6
#endif
);那岂不是要描述多种情况?
在vc6.0下编译不通过,难道真的没有一个合适解释吗?
有。宏是在编译时展开的。也就是
#define ADD(a,b,c) add_func(a,b,c)ADD(1,
#ifdef _A_
2,
#else
3,
#endif
4);会被展开成为
add_func(1, #ifdef _A_ 2, #else 3, //...
编译器会认为你提供了错误的参数表。