C/C++宏定义可不可以传入参数?

#define CreateButton CreateWindow("button","ENTER_BUTTON",BUTTONSTYLE,10,10,120,20,hwnd,(HMENU)IDC_ENTER,NULL,0);

类名、按按名、样式……可以传入吗?怎么做呢?

#define P(a,b,c,d,e,f,g.........)参数可以随便设,宏定义其实是一个预处理替换,只是你要将对应的参数执行正确的操作。在C++中宏定义一系列简单操作的话可以用inline函数来替换,编译器对inline函数的处理是把接受了参数的inline函数的函数体和目标代码进行替换,有点像宏但比宏安全。

例如:#define P(x,y) int array[x]; cout << array[y];

在main中书写P(3,2)则编译器便把P(3,2)替换为 int array[3]; cout << array[2];

也可以使用inline函数如:
inline void func(const int& x,const int& y){
int array[x];
cout << array[y];
}
但有时候使用宏定义却很危险如:
#define P(x,y) (x) > (y) ? (x):(y)
int a = 3;
int b;
对于这样的语句b = P(++a,3)最后b却等于5,这并不是你想要的结果,这个时候使用inline函数就可以解决宏定义的不安全问题如:
template<class T>
inline const T& func(const T& x,const T& y){
return x > y ? x : y;
}
这样b = (++a,3)最后的结果便是4。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-31
1、当然可以。
#define P(a,b,c,d,e,f,g.........)参数可以随便设,宏定义其实是一个预处理替换,只是要将对应的参数执行正确的操作。在C++中宏定义一系列简单操作的话可以用inline函数来替换,编译器对inline函数的处理是把接受了参数的inline函数的函数体和目标代码进行替换,有点像宏但比宏安全。

2、例如:#define P(x,y) int array[x]; cout << array[y];本回答被网友采纳
第2个回答  2015-09-30
#define fun(x) (x+x)

fun(2)就等于4
第3个回答  2015-09-15
可以的,例如
#define C(x) (x*2)*3.14
相似回答