基于51单片机-C语言之预处理总结

发布者:eaff86最新更新时间:2021-04-20 来源: eefocus关键字:51单片机  C语言  预处理 手机看文章 扫描二维码
随时随地手机看文章

预处理命令由符号“#”开头,包括宏定义,文件包含,条件处理三个部分。


其中条件编译我还没有用过,所以就详细介绍一下宏定义和文件包含。


一.宏定义


宏定义命令为#define,它的作用就是实现用一个简单易读的字符串来代替


另一个字符串。增加程序的可读性,和维护性。


宏定义分为不带参数的宏定义,和带参数的宏定义。


不带参的宏定义:


一般格式:#define 标识符 常量表达式


例如用一个字符代替一个常数


#define PI 3.1415926


当程序中出现3.1415926这个常数的时候就可以用PI这个字符代替,如果想修改这个常数只需要修改这个宏定义中的常数,就可以达到修改整个文件中这个常数的目的。这就是增加维护性的体现。


使用注意:


使用中#define 和标识符之间必须留有空格,标识符和常量表达式之间也必须有空格。


带参数的宏定义:


带参数的宏定义和不带参数的宏定义之间的区别在于,带参数的宏定义不只是进行字符串的替换,而且还要进行参数的替换。注意是参数替换。


格式:


#define 宏符号名(参数表) 表达式


如:


#define MIN(x,y) (((x)<(y))?(x):(y))


1;注意为了安全起见后边表达式中的参数使用“()”括起来,防止程序中


使用该宏时由于优先级问题引起的错误。


如:#define S(r) PI*r*r


如果程序中用到m=S(a+b)


则替换后等同于 m="PI"*a+b*a+b


显然与我们的目的不同。


2.宏定义命令#define 要求一行内写完,如果一行内完不成可以用“”表示下一行继续。


二.文件包含


头文件的目的就是在库函数与使用该库函数的程序之间建立接口。


头文件的定义格式。


以头文件led.h为例。


#ifndef __LED_H__


#define __LED_H__


………内容………


#endif


使用尖括号和双引号的区别:


使用尖括号的话,编译时会先在系统include目录里搜索,如果找不到才会在源代码所在目录搜索;使用双引号则相反,会先在源代码目录里搜索。这就意味着,当系统里(如/usr/include/里)有一个叫做at89c51.h的头文件,而你的源代码目录里也有一个你自己写的at89c51.h头文件,那么使用尖括号时用的就是系统里的;而使用双引号的话则会使用你自己写的那个。


所以建议: 使用系统里提供的头文件时使用尖括号


使用自己编写的头文件时使用双引号


典型的头文件内容包括:


1:说明文字。用于注释该头文件的主要内容,函数的作用,函数的接口等


2; #define 命令命名的宏定义


3:类型定义。包括结构体,共用体,数组等类型定义


关键字:51单片机  C语言  预处理 引用地址:基于51单片机-C语言之预处理总结

上一篇:51单片机中断优先级以及中断嵌套
下一篇:51单片机RAM 数据存储区知识总结

推荐阅读最新更新时间:2024-10-21 13:32

基于51单片机--C语言预处理总结
编译预处理器是C语言编译器的一个重要组成部分。很好的利用C语言的预处理命令可以增强代码的可读性,灵活性,和易于修改等特点,便于程序的结构化。 预处理命令由符号“#”开头,包括宏定义,文件包含,条件处理三个部分。 其中条件编译我还没有用过,所以就详细介绍一下宏定义和文件包含。 一.宏定义 宏定义命令为#define,它的作用就是实现用一个简单易读的字符串来代替 另一个字符串。增加程序的可读性,和维护性。 宏定义分为不带参数的宏定义,和带参数的宏定义。 不带参的宏定义: 一般格式:#define 标识符 常量表达式 例如用一个字符代替一个常数 #define PI 3.1415926 当程序中出现3.1415926这个常数的时候就
[单片机]
基于51单片机-C语言预处理总结
简介:编译预处理器是C语言编译器的一个重要组成部分。很好的利用C语言的预处理命令可以增强代码的可读性,灵活性,和易于修改等特点,便于程序的结构化。 预处理命令由符号“#”开头,包括宏定义,文件包含,条件处理三个部分。 其中条件编译我还没有用过,所以就详细介绍一下宏定义和文件包含。 一.宏定义 宏定义命令为#define,它的作用就是实现用一个简单易读的字符串来代替 另一个字符串。增加程序的可读性,和维护性。 宏定义分为不带参数的宏定义,和带参数的宏定义。 不带参的宏定义: 一般格式:#define 标识符 常量表达式 例如用一个字符代替一个常数 #define PI 3.1415926
[单片机]
基于51单片机-C语言预处理总结
预处理命令由符号“#”开头,包括宏定义,文件包含,条件处理三个部分。 其中条件编译我还没有用过,所以就详细介绍一下宏定义和文件包含。 一.宏定义 宏定义命令为#define,它的作用就是实现用一个简单易读的字符串来代替 另一个字符串。增加程序的可读性,和维护性。 宏定义分为不带参数的宏定义,和带参数的宏定义。 不带参的宏定义: 一般格式:#define 标识符 常量表达式 例如用一个字符代替一个常数 #define PI 3.1415926 当程序中出现3.1415926这个常数的时候就可以用PI这个字符代替,如果想修改这个常数只需要修改这个宏定义中的常数,就可以达到修改整个文件中这个常数的
[单片机]
51单片机总结--C语言预处理
编译预处理器是C语言编译器的一个重要组成部分。很好的利用C语言的预处理命令可以增强代码的可读性,灵活性,和易于修改等特点,便于程序的结构化。 预处理命令由符号 # 开头,包括宏定义,文件包含,条件处理三个部分。 其中条件编译我还没有用过,所以就详细介绍一下宏定义和文件包含。 一.宏定义 宏定义命令为#define,它的作用就是实现用一个简单易读的字符串来代替 另一个字符串。增加程序的可读性,和维护性。 宏定义分为不带参数的宏定义,和带参数的宏定义。 不带参的宏定义: 一般格式:#define 标识符 常量表达式 例如用一个字符代替一个常数 #define PI 3.1415926 当程序中
[单片机]
89 C语言预处理指令总结
预处理指令是以#号开头的代码行,#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符,整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。 下面是本章涉及到的部分预处理指令: 指令 说明 # 空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 #ifdef 如果宏已经定义,则编译下面代码 #ifndef 如果宏没有定义,则编译下面代码 #elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif 结束一
[单片机]
学习笔记--C语言预处理--条件编译
预处理名称意义 #define 宏定义 #undef 撤销已定义过的宏名 #include 使编译程序将另一源文件嵌入到带有#include 的源文件中 #if #else #elif #endif等条件编译 #line 改变当前行数和文件名称,它们是在编译程序中预先定义的标识符 命令的基本形式如下:#line number #error 编译程序时,只要遇到#error 就会生成一个编译错误提示消息,并停止编译 #pragma 为实现时定义的命令,它允许向编译程序传送各种指令例如,编译程序可能有一种选择,它支持对程序执行的跟踪。可用#pragma 语句指定一个跟踪选择。 条件编译 条件编译的功能使得我们
[单片机]
有关c语言预处理
先看下面三个问题: 1.预处理是C语言的一部分吗? 2.包含 # 的都是预处理吗? 3.预处理后面都不需要加;吗? 下面是ANSI标准定义的C语言预处理指令: 另外,ANSC还定义了如下宏: _LINE_ 表示正在编译的文件的行号 _FILE_ 表示正在编译的文件的名字 _DATE_ 表示编译时刻的日期字符串,例如: 25 Dec 2007 _TIME_ 表示编译时刻的时间字符串,例如: 12:30:55 _STDC_ 判断该文件是不是定义成标准C 如果你用的是标准编译器,理论上支持上宏定义,当然,如果不是标准的话,有可能支持一部分,或者完全不支持。注意:宏名的书写由标识符与两边各二条下划线构成。 现在回到刚开始的问题:
[单片机]
有关<font color='red'>c语言</font><font color='red'>预处理</font>
杂谈PID控制算法——最终篇:C语言实现51单片机中的PID算法
真遗憾,第二篇章没能够发表到首页上去。趁热打铁。把最终篇——代码篇给发上来。 代码的设计思想请移步前两篇文章 //pid.h #ifndef __PID__ #define __PID__ /*PID = Uk + KP* +KI*E(k)+KD* ;(增量型PID算式) 函数入口: RK(设定值),CK(实际值),KP,KI,KD 函数出口: U(K)*/ typedef struct PIDValue { int8 KP; int8 KI; int8 KD; int8 F; int8 BITMOV; int EK ; int UK; int
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved