09预处理&枚举&静态变量

预处理

任何一个应用程序编译的第一步就是“预处理”

“预处理”阶段,会将所有#开头的预处理指令处理掉

一丶宏定义

方式一:#define 宏名

​ 方式一 通常和#ifndef配合使用

方式二:#define 宏名 值

方式三:#define 带参宏 值

例子:

#define add(a,b) a+b
int x=add(10, 20);

​ [注] 所谓的宏替换,只是纯粹的字符串的替换

​ [注] 预处理阶段不会做任何的数学运算

二丶条件编译

#ifndef  XXX_H
#define  XXX_H
......
#endif

​ [注] 条件编译作用:为了防止头文件被重复包含

三丶typedef关键字的使用

int a;//定义一个普通变量
typedef int a;//定义新类型,a就是新类型名,使用a就可以像使用int一样定义整型变量
unsigned long x;
typedef unsigned long width;
width x;//==unsigned long x;

​ [注] 使用typedef关键字,定义新类型名,新类型名更加简短,更有内涵,更适合当前程序

枚举

C语言中的枚举是用来定义多个常量的

一丶枚举的定义

enum color {RED,BLUE=10,GREEN};
//默认枚举列表中每个枚举项的值是从0开始的

二丶枚举的使用

printf("%d\n",RED);
printf("%d\n",BLUE);
printf("%d\n",GREEN);
enum color e;
e=10; 

静态变量

一丶静态局部变量

​ 在一个局部变量定义时用static修饰,这个局部变量立即变为静态变量

​ 静态局部变量会存储在[数据区],[数据区]中的数据在main开始执行前就存在,在main调用结束之后才消失

void foo(void)
{
    int a;//普通局部变量
    static int b;//静态局部变量
}
void foo(void)
{
    static int a=0;//静态变量只会在main函数执行之前做一次初始化
    a++;
    printf("%d\n",a);
}

int main(int argc, const char * argv[])
{
    foo();//1
    foo();//2
    foo();//3
    foo();//4
    return 0;
}

二丶静态全局变量

​ 在一个全局变量定义时用static修饰,这个全局变量立即变为静态变量

​ [区别] 静态全局变量定义在所有函数之外

​ 静态全局变量也只会初始化一次,也是在main函数开始执行之前做初始化动作,也是存储在[数据区]

你可能感兴趣的:(09预处理&枚举&静态变量)