【规则】
宏在C语言中极其重要,而在C++里用得就少多了。关于宏得第一规则是:绝不应该去使用它,除非你不得步这样做。
【可以使用带参数的宏】
#define MAC(x,y) argument1:x argument2:y
在使用MAC时必须提供俩个字符串,它们将在MAC()被展开时用于取代x和y,例如,
expanded = MAC(foo bar,yuk yuk) =》》 expanded = argument1:foo bar argument2: yuk yuk.
【宏名字不能重载,宏预处理不能处理递归调用】
#define PRINT(a,b) cout<<(a)<<(b)
#define PRINT(a,b,c) cout<<(a)<<(b)<<(c)//重复定义使第一个宏定义无效
#define FAC(n) (n>1)?n*FAC(n-1):1//递归的宏 错误的调用。
【一些可能有用的宏】
#define CASE break;case
#define FOREVER for(;;)
【更好的办法】
cosnt inline template enum 和 namespace 机制等都是为了用做预处理器结构的许多传统使用方式的替代品。
//C++提供预处理器替代品
const int answer = 42;
template<class T> inline T min(T a, T b) { return (a < b) ? a : b; }
【##宏运算符可以拼接起俩个串,构造出一个新串。】
#define NAME2(a,b) a##b
int NAME2(hack, cah)()
{
return 1000;
}
//在主函数调用:
int re = hackcah();