一、static:此定义类型有以下3种情况:
1、当修饰一个全局变量时,这个变量的作用域被改变了,只能在当前文件中调用;
2、当修饰一个局部变量时,改变了变量的生命周期,直到程序结束才会被释放。注:一般的调用函数中定义的局部变量默认存储在栈空间,而如果是被static修饰的局部变量存储在数据段内(静态数据库);
3、除了修饰变量,还可以修饰函数,被修饰的函数只可在当前文件中被调用;
二、#define:定义方法如下:
1、首先宏定义可定义宏变量如:#define N 10 则在此程序中N即为已常量10;
2、宏定义还可以定义宏函数如:#define OUT printf("Helloworld\n") 则在此程序中每出现OUT;的字样则输出Helloworld并换行;若为#define P(s) printf("%s\n",s) 则在此程序中每出现类似于P("asdasd");的字样则输出此字符串并换行;
3、宏定义有一个易错知识点如下:
#define S(x) x*x
int a = 1, b = 2;
printf("%d\n",S(a + b));
此程序执行下来输出值为5,而不是9;因为宏定义只做简单的替换即 S(a + b) = 1 + 2*1 + 2 = 5;
三、自定义函数与宏定义的区别
1、宏函数优点:节省空间(无需像自定义函数一样给形参分配空间,因为无形参)
缺点:1、浪费时间;
2、没有语法检查,不安全;
普通函数优点:1、有语法检查;
2、浪费空间;