宏定义不管在C还是C++中都经常用到,其用法是个比较神奇的东西,宏定义不表示任何类型,同样也表示任何类型,这也是宏定义的一个优点,宏函数类似C++的函数重载,可以用于任何类型,但不进行类型检查,宏定义实际代表的就是一个字符串,比如下面这段代码
#include<iostream>
using namespace std;
#define M int main(
M) {
cout << "hello world" << endl;
return 0;
}
看起来就是一段错误的代码,但的的确确是可以编译通过并且运行的, 其输出结果如下:
宏定义还有一个优点就是宏定义是不限制作用域的,即使被定义到了一个函数中,在其他函数中仍然能够使用。
#include<iostream>
using namespace std;
#define M int main(
void func() {
#define T 10
}
int print() {
int a = T;
cout << "a = " << a << endl;
return 0;
}
M) {
print();
return 0;
}
输出结果如下:
这也是明显跟typedef不同之处,typedef是限定作用域的,若typedef在函数1中定义,则不能用在函数2中。