一. typedef用法详解

1. 功能概述:

typedef关键字可以用于为已经存在的数据类型定义一个新的别名,目的是使数据类型的名称更容易被理解,也可以提高代码的可读性和可维护性

#include <stdio.h>

typedef unsigned int unit;

typedef struct Node {
	int a;
	int b;
}Node;

int main()
{
	unsigned int num1;
	unit num2;            //

	struct Node n1;
	Node n2;              //

}

二. define用法详解

1. 定义标识符常量

#define  NUM       100

2. 定义宏

#define  ADD(x, y)   ((x) + (y))    

1. 这里ADD是宏名
2. (x,y) 是宏参数
3. ((x) + (y))是宏体


三. static详解

1. static修饰局部变量

static 修饰的变量会保存到静态区, 并且变量只会被创建一次, 声明周期和程序的声明周期一样长, 但是作用范围依然是其所在的代码块内.

void add(int a) {
    int count = 0; // 普通局部变量
    static int sum = 0; // 静态局部变量

    count++; // 每次调用函数时都会初始化,不同调用之间互不影响
    sum += a; // 只在第一次调用函数时初始化,之后每次调用时都会保持上一次的结果

    printf("Count: %d, Sum: %d\n", count, sum);
}

int main() {
    add(3);   //Count: 1, Sum: 3
    add(4);   //Count: 1, Sum: 7
    add(5);   //Count: 1, Sum: 12
    return 0;
}

2. static 修饰全局变量

static修饰全局变量的时候, 这个全局变量的外部连接属性, 就变成了内部链接属性, 其他源文件就不能再用到这个全局变量了.

static修饰全局变量依然存储在静态区.

/*
另外,使用static修饰的全局变量在程序启动时会被初始化为0,和未被赋初值的普通全
局变量不同。需要注意的是,在C++中,如果一个全局变量被static修饰,那么在另一个
文件中声明一个同名的全局变量是完全合法的,这两个变量是不同的,互相独立。但在C
中,同名的全局变量会被认为是同一个变量,其余文件中的声明会被忽略。因此,在C中,
一般会将使用static修饰的全局变量放到单独的源文件或者头文件中,并在该文件中做出
定义,以便使用该变量的其他文件引用。
*/

3. static 修饰函数

static修饰函数也是关闭函数的外部链接属性.