🚩define
🎌一.define的使用方法
🎀1.定义常量
#define M 10010
int main()
{
cout << M << endl;
cout << M + M << endl;
//cout << M++ << end;//会报错
return 0;
}
我们定义了一个名为M的常数,大小为10010
常量可以进行输出,可以进行加减乘除的算数运算,但是不能进行自增自减的操作(他不是变量)
🎀2.定义宏
#define Add(x,y) (x+y)
#define Sub(x,y) (x-y);
int main()
{
int a = 10;
int b = 20;
cout << Add(a, b) << endl;
cout << Sub(a, b) << endl;
printf("Add(%d,%d)\n", a, b);
return 0;
}
定义宏和定义常量的方式差不多,但是我们还是有需要注意的地方的
🎉<1>宏和常量中间是否需要加空格
#define Sub(x,y) (x-y);
#define Add(x,y) (x+y)
#define MM(x,y)(x+y)
#define M100010
int main()
{
int a = 10;
int b = 20;
cout << Add(a, b) << endl;
//cout << Sub(a, b) << endl;
cout << MM(a, b) << endl;
cout << M << endl;
//printf("Add(%d,%d)\n", a, b);
return 0;
}
Add与MM的作用是一样的,我们可以看见Add的宏名与实现之间加了空格,MM之间没有加空格,但是他们的运行结果是一样的,说明定义宏的—宏名与实现之间—是可以不加空格的
但是如果定义的常量没有空格就会认为他们整个都是常量名(会报错)
🎉<2>.定义宏和常量后面有分号怎么办
#define Sub(x,y) (x-y);
#define Add(x,y) (x+y)
#define MM(x,y)(x+y)
#define M100010
#define M 100010;
int main()
{
int a = 10;
int b = 20;
cout << Add(a, b) << endl;
//cout << Sub(a, b) << endl;
cout << MM(a, b) << endl;
//cout << M << endl;
cout << M << endl;
//printf("Add(%d,%d)\n", a, b);
return 0;
}
我们可以看见有分号是会报错的,但是为什么呢???----这就要我们知道define到底是怎么使用的了
实际上编译器在运行之前,会将#define进行替换,替换成定义的部分,就成了下面这种结果
#define Sub(x,y) (x-y);
#define Add(x,y) (x+y)
#define MM(x,y)(x+y)
#define M100010
#define M 100010;
int main()
{
int a = 10;
int b = 20;
//cout << Add(a, b) << endl;
cout << Sub(a, b) << endl;//cout<<(x-y);<<endl;
//cout << MM(a, b) << endl;
//cout << M << endl;
cout << M << endl;//cout<<100010;<<endl;
//printf("Add(%d,%d)\n", a, b);
return 0;
}
🚩const
const定义的是一个只读类型的变量,我们姑且可以认为他是常量
int main()
{
const int N = 1000100;
int const M = 10010;
N++;
M++;
--N;
return 0;
}
他们都是不允许自增自减的----所以可以认为是常量
而且变量是可以使用extern,static关键字的,不仅如此,他们的作用域也不一样
🏅🏅🏅作用域
***变量的作用域可以是局部,全局,***但是#define的作用域就灵活的多了
void test()
{
#define a 10010
}
int main()
{
cout << a;
return 0;
}
证明define作用域在整个文件中,同时我们是可以改变他的作用域的
void test()
{
#define a 10010
#undef a
}
int main()
{
cout << a;
return 0;
}
这样他的作用域就成了局部
以上就是我对const和define的拙见,希望能对读者有所帮助,其中或许有某些问题,还望大佬斧正,感谢大家的支持!!!