这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » C语言学习小结(关于预处理命令以及条件编译)

共9条 1/1 1 跳转至

C语言学习小结(关于预处理命令以及条件编译)

高工
2012-11-12 20:43:47     打赏
预处理命令

预处理命令是由ANSIC统一规定的,但他不是C语言本身的组成部分,不能直接对他们进行编译。必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预处理”,若程序中用#define命令定义了一个符号常量A,则在预处理时将程序中所有的A都置换为指定的字符串。若程序中用#include命令包含了一个文件“stdio.h”,则在预处理时将stdio.h文件中的实际内容代替该命令。经过预处理后,程序中不再包含预处理命令,在后再有编译程序对预处理后的源程序进行通常的编译处理,得到可供程序执行的目标代码。

C提供的预处理功能主要包括以下三种:

1:宏定义#define;

2:文件包含#include

3:条件编译#ifndef XXX  

      #define XXX

      #else ...

#endif

为了与一般的C语句相区别,宏定义命令都以“#”开头。



宏定义

不带参数的宏定义

#define  标示符  字符串

宏名一般用大写字母表示,以便于变量名相区别。
使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量。
宏定义使用宏名替代一个字符串,也就是做简单的置换,不做正确性检查。
宏定义不是C语句,不必在行末加分号。
#define出现在程序中函数的外面,红名的有效范围为定义命令之后到源文件结束。
可以用#undef命令终止宏定义的作用域。
在进行宏定义时,可以引用已定义的宏名,可以层层置换。
对程序中“”中的与宏名相同的字符不做置换。
宏定义是专门用于预处理命令的一个专用名词,他与定义变量的含义不同,只作字符替换,不分配内存空间。


待参数的宏定义注意其书写格式



文件包含处理

所谓文件包含处理是指一个源文件可以将另外一个源文件的全部内容包含进来。

在#include命令中,文件名可以用<>或“”,二者的区别是用<>时,系统到存放C库函数头文件所在的目录中去寻找要包含的文件。“”时,系统先在用户当前目录中寻找要包含的文件,若找不到再去库函数头文件中去寻找。(库函数的用<>,自己写的用“”)











条件编译的三中形式

 #ifdef 标示符
程序段1;

#else ...

程序段2;

#endif

它的作用是当指定的标示符已经被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2 

(2)

#ifndef 标示符

程序段1;

#else ...

程序段2;

#endif

它的作用是当指定的标示符未被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2 

(3)

#if 表达式

程序段1;

#else ...

程序段2;

#endif






关键词: 语言学习     小结     关于     预处理     命令     以及     条件         

专家
2012-11-13 17:26:05     打赏
2楼
很基本的C语言知识了
好像中间几个在单片机编程里不是很常见

高工
2012-11-13 19:50:22     打赏
3楼
对,学过就忘了,特此提醒自己一下

工程师
2012-11-13 20:02:27     打赏
4楼
我个人的看法是,这些语言特点,如果真的能用的的心应手的时候,应该就是入了门了,正在迈入高手的行列~~~

高工
2012-11-13 20:45:52     打赏
5楼
貌似都是常规的宏定义

高工
2012-11-13 21:45:11     打赏
6楼
高手就是一个反复的过程,加油

高工
2012-11-13 21:46:52     打赏
7楼
没错滴,哈哈哈

工程师
2012-11-13 22:59:26     打赏
8楼
嗯,确实,+油

助工
2012-11-19 18:16:49     打赏
9楼
恩,温故而知新,可以为师yi

共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]