宏定义
格式:
#define 标识符 字符串
在编译预处理时对所有出现的宏名,用宏定义中的字符串去代换,也称为宏代换或宏展开。对于双引号括起来的字符,是不会进行替换的。
标识符为定义的宏名,字符串可以是常数,表达式,格式串等。
#include <stdio.h>
#define PI 3.1415926535
#define L(r) 2*PI*r//带变量的宏
typedef double DOUBLE;//给double取个别名
int main() {
DOUBLE c = L(3);
printf("%lf", c);
}
条件编译
格式:(条件是常量表达式,不能是变量)
#if 条件1
code
#elif 条件2
code
#else
code
#endif
示例:
#include <stdio.h>
int main() {
#define SCORE 67
#if SCORE > 90
printf("优秀");
#elif SCORE > 60
printf("良好");
#else
printf("不及格");
#endif
}
typedef关键字
给某个类型取个别名。
格式:
typedef 原类型名 新类型名;
这里的原类型名可以是基本数据类型,也可以是某个类型的别名,甚至是数组,指针,结构类型。
示例:
#include <stdio.h>
int main() {
typedef struct {
int age;
char *name;
} PersonType;
PersonType p;
p.age=18;
p.name = "suixin";
printf("%d,%s", p.age, p.name);
}
const关键字
const修饰变量,可以让变量的值不能改变。
作用:
- 可以定义常量。
- 便于进行类型检查,使得编译器对处理内容有更多了解,消除了一些隐患。
- 保护被修饰的东西,防止意外修改,增强程序的健壮性。
- 节省内存空间,避免不必要的内存分配。
- 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,使得它成为一个编译期间的常量,没有了存储与读内存的操作,提高了效率。
可以用在类型说明符前面,也可以在后面。可以修饰简单类型,数组类型。
修饰函数的形参,则局部变量在函数内部不可改变。修饰函数的返回值,则返回值不可改变,修饰指针变量,const在左侧,表示值不能改变,指向可以改变。const在右侧,表示指向不能改,但是值可以改变。两侧都有,则都不能改。