ANSIC标准规定在C源程序中加入一些“预处理命令”,用来改进程序设计环境,提高编程效率。这些命令不是C语言的组成部分,不能直接对它们进行编译。
C与其他高级语言的一个区别:可以使用预处理和具有预处理的能力。
预处理功能:宏定义,文件包含,条件编译,这些命令均以符号“#”开头
不带参数的宏定义:用一个指定的标识符(即名字)来代表一个字符串
一般形式:#define 标识符 字符串
几点说明:1.标识符称为宏名,在预编译时将宏名替换成字符串的过程称为“宏展开”
2.宏名一般用大写;宏定义不是C语句,不必在行末加分号
3.宏定义是用宏名替换一个字符串,不做正确性检查,但是在“宏展开”会发现错误并报错
4.#define范围是定义命令道源文件结束,但是可以用#undef命令终止宏定义的作用域
5.宏定义与变量含义不同,不分配内存空间
带参数的宏定义:不止要进行简单的字符串替换,还要进行参数替换
一般形式:#define 宏名(参数表) 字符串
注:宏名和带参数的括号之间不应该加空格;否则将空格以后的字符都作为替代字符串的一部分
文件包含:指一个源文件可以将另一个源文件的全部内容包含进来。
一般形式:#include "文件名" 或#include <文件名>
#include <stdio.h>//引用头文件
#include "stdio.h"//<>,""区别:<>从系统目录下寻找文件,找不到报错;""从项目目录下寻找文件,找 不到就到系统目录下查找,再找不到就报错。<>引用系统文件;""引用自己写的文件。引用其他项目目录下的文件格式".../.../..."
条件编译:满足某条件时对某一组语句进行编译,不满足就编译另一组语句
形式一:#ifdef标识符
程序段1
#else
程序段2
#endif
作用:若指定的标识符已经被#define命令定义过,则在程序编译阶段编译程序段1,否则编译程序段2(程序段可以是语句组,也可以是命令行)
形式二:#ifndef标识符
程序段1
#else
程序段2
#endif
作用:若标识符未被定义过,则编译程序段1,否则编译程序段2
形式三:#if标识符
程序段1
#else
程序段2
#endif
作用:当指定的表达式值为真(非零)时就编译程序段1,否则编译程序段2
用typedef命名已有类型(不属于预处理命令的部分,只是与宏定义进行比较)
用typedef声明新的类型来代替已有的类型名
eg:typedef int INTEGER; 指定用INTEGER代替int类型
注:1.typedef可以声明各种类型名,但是不能用来定义变量
2.typedef只是对已存在的类型指定一个新的类型名,并没有创造新的类型
3.typedef有利于程序的通用与移植
typedef与#define区别:typedef int COUNT; & #define COUNT int;
作用都是用COUNT代替int,但是#define是在预编译时作简单的字符串替换;而typedef是在编译时给int类型重新命名,然后用COUNT去定义变量
本文出自 “毕业---觉醒---行走” 博客,请务必保留此出处http://tjy888.blog.51cto.com/5576345/1714422
最最最最最最最最基础的C---预处理命令和typedef定义
原文:http://tjy888.blog.51cto.com/5576345/1714422