//auto
局部变量默认都是auto类型,出了其作用域,变量自动销毁
//typedef
类型重定义(本质上是将类型起了个小名)
typedef int in;
typedef struct Node
{
int date;
struct Node* next;
}Node;
//int main()
//{
// auto int a = 10;
// in b = 2;
// printf("b = %d\n", b);
// Node n2;
//
// return 0;
//}
//static关键字
//static修饰局部变量的时候,局部变量出了作用域不被销毁。
//本质上,static修饰局部变量的时候,改变的变量的存储位置
//影响了变量的生命周期,和程序的生命周期一样长(静态区)
void test()
{
static int a = 1;//用static修饰的变量只能定义一次,下次函数调用此句无效
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
for (; i < 10; i++)
{
test();
}
return 0;
}
//static修饰全局变量
extern int g_val;//全局变量是具有外部链接属性的
//但是static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性
//其它源文件(.c)就不能再使用这个全局变量了
//再使用是给我们的感觉是作用域变小了,原来是整个工程,之后是所在的源文件
//int main()
//{
// printf("g_val = %d\n", g_val);
// return 0;
//}
//static修饰函数(函数也是具有外部链接属性的)
//原理类似于全局变量
//一个函数本来是具有外部链接属性的,但是被static修饰的时候,
//外部链接属性就变成了内部链接属性,其它源文件就无法使用
//extern int Add(int x, int y);//若此函数在其所在.c文件中被static修饰,则无法使用
//int main()
//{
// int a, b;
// printf("请输入a,b的值:\n");
// scanf("%d%d", &a, &b);
// int c = Add(a, b);
// printf("a + b = %d\n", c);
// return 0;
//}
//register-寄存器
//cup(中央处理器)处理数据的速度越来愈快,但是内存的读写速度跟不上,于是在内存之上有高速缓存,寄存器,
//寄存器的读写速度最快,与cpu交互,进行数据处理
//int main()
//{
// register int num = 3;//建议:3存储在寄存器当中,最终放在哪里还是编译器说了算
// return 0;
//}
//define定义标识符常量
#define NUM 100
//#define 定义宏
//宏是有参数的
#define ADD(x,y) ((x)+(y))//宏是完成替换了,本质上是位置的替换,
//a替换x,b替换y,ADD(a,b)--> ((a) + (b))
//int main()
//{
// printf("NUM = %d\n", NUM);
// double a, b;
// printf("请输入a,b的值\n");
// scanf("%lf%lf", &a, &b);
// double c = ADD(a, b);
// printf("a + b = %.2lf\b", c);//.2是算上小数点后一共2位
// return 0;
//}