预处理
任何一个应用程序编译的第一步就是“预处理”
“预处理”阶段,会将所有#开头的预处理指令处理掉
一丶宏定义
方式一:#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函数开始执行之前做初始化动作,也是存储在[数据区]
网友评论