历史上的今天
返回首页

历史上的今天

今天是:2025年04月22日(星期二)

正在发生

2021年04月22日 | 基于51单片机-C语言之预处理总结

2021-04-22 来源:eefocus

简介:编译预处理器是C语言编译器的一个重要组成部分。很好的利用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:类型定义。包括结构体,共用体,数组等类型定义


推荐阅读

史海拾趣

Franz Binder GmbH & Co公司的发展小趣事

Franz Binder GmbH & Co公司的发展故事

故事一:初创与奠基

Franz Binder GmbH & Co公司,简称宾德集团,成立于1960年,由Franz Binder在德国创立。起初,公司仅是一个机械加工车间,专注于加工车削件。然而,随着技术的不断积累和市场需求的增长,宾德开始专注于圆形连接器的生产。1967年,公司成功生产出第一只连接器,这标志着宾德正式进入连接器制造领域。此后,宾德不断投入研发,提升产品质量,逐渐在行业内崭露头角。

故事二:全球化布局

随着业务的不断扩展,宾德集团开始寻求全球化发展。1979年,宾德在瑞士成立了分公司Binder Electronic Components,标志着公司正式走向世界。此后,宾德在全球范围内迅速扩张,相继在美国、中国、法国、瑞典、英国、新加坡、荷兰和韩国等国家成立了子公司,并与全球45个经销商建立了合作关系。这一全球化布局不仅提升了宾德的品牌影响力,还为公司带来了更多的市场机会。

故事三:技术创新与产品多样化

宾德集团始终将技术创新视为企业发展的核心动力。公司不断投入研发资源,推出了一系列具有创新性的连接器产品。从微型连接器到电源连接器,再到医疗设备连接器和自动化技术连接器,宾德的产品线日益丰富,满足了不同行业的需求。特别是在工业自动化领域,宾德连接器以其高可靠性、高传输率和易于安装的特点,赢得了众多客户的青睐。

故事四:品质与认证

品质是宾德集团赖以生存和发展的基石。公司始终坚持高标准、严要求,确保每一件产品都符合国际质量标准。为此,宾德不仅通过了ISO 9001和ISO 14001等国际质量管理体系认证,还获得了UL、VDE和ESTI+等多项国际认证。这些认证不仅证明了宾德产品的卓越品质,也为客户提供了更多的信心和保障。

故事五:中国市场的发展

中国作为全球最大的电子市场之一,对宾德集团的发展具有重要意义。2001年,宾德在中国成立了全资子公司——南京宾德电气有限公司(宾德中国),负责中国地区的销售和客户服务。自成立以来,宾德中国凭借优质的产品和服务,迅速赢得了中国市场的认可。特别是在智能制造、自动化技术和医疗等领域,宾德连接器的应用越来越广泛,为中国电子行业的发展做出了积极贡献。

HAHN - Elektrobau GmbH & Co KG公司的发展小趣事

进入21世纪后,高通在推动5G技术发展方面发挥了关键作用。作为真正的5G领军企业,高通在基础研发方面持续投入,拥有引领和参与标准制定的长期历史。高通的5G技术涵盖了从系统构建到多样化应用的各个方面,包括毫米波频谱的利用、大规模MIMO技术的演进等。这些突破性发明为现代蜂窝通信提供了强有力的支撑,使得高通在5G标准制定和技术实施方面占据了核心地位。高通已签订超过150份5G许可协议,为全球超过180亿台终端提供了技术支持。

Baumer Electric Ag公司的发展小趣事

Baumer Electric Ag公司创立于1952年,初期主要专注于微动开关的生产。面对市场竞争的激烈,公司创始人Herbert Baumer凭借其敏锐的市场洞察力和坚定的决心,带领团队不断研发新产品,提升技术水平。1960年,公司成功推出首个程序控制系列,标志着Baumer在电控生产流程监控和控制领域取得了重要突破。

Greatbatch-Sierra Inc公司的发展小趣事

作为一家技术驱动的公司,Baumer Electric Ag始终注重研发投入和技术升级。公司不断引进先进的生产设备和技术手段,提高生产效率和产品质量。同时,Baumer还积极与高校、科研机构等合作,开展前沿技术研究和新产品开发。这些举措为公司的持续发展提供了强大的技术支持和创新动力。

这五个故事展示了Baumer Electric Ag公司在电子行业中的发展历程。从创业初期的坚持与突破,到关键人才的引入与领导层的更迭,再到股份制改革与产品创新的结合,以及国际化战略与出口业务的拓展和持续投资与技术升级,Baumer Electric Ag凭借其卓越的技术实力和创新精神,逐步在电子行业中树立起了自己的品牌形象和市场地位。

Concord Semiconductor Corp公司的发展小趣事

为了进一步提升市场竞争力,Concord Semiconductor Corp积极寻求与其他企业的战略合作。通过与全球领先的电子设备制造商建立长期合作关系,公司成功将其产品打入国际市场,实现了业务的快速增长。同时,公司还与多家研究机构展开技术合作,共同研发新型半导体材料和技术,为公司的长远发展提供了有力支撑。

Continental Industries公司的发展小趣事

在电子行业的发展过程中,Continental Industries注重与其他企业的合作与共赢。公司与多家知名企业建立了长期稳定的合作关系,共同开展技术研发和产品创新。通过资源共享和优势互补,双方实现了互利共赢,共同推动了电子行业的进步。

问答坊 | AI 解惑

今天发现个好东西:快克高频烙铁,有没有网友打算DIY一个?

具体介绍,可以到淘宝上一搜“ 快克203” ,广告就不做了,这个东西淘宝也不太多,价格则非常畸形。 发现这个东西其实原理跟前段时间某位失业高人修的电磁炉一样:高频涡流加热原理,外形同普通烙铁一样,发热体则是烙铁芯本身,而无论烙铁芯、加 ...…

查看全部问答>

基于WinCE的串行外设接口驱动程序设计实现.pdf

基于WinCE的串行外设接口驱动程序设计实现.pdf…

查看全部问答>

急求大侠回答一个AD采样的问题

#include <reg51.h>unsigned char code seg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,                                           &n ...…

查看全部问答>

PC通过Activesync上网

平台:wince6.0 ActiveSync4.5 终端:PDA PDA可上网,要实现PC通过ActiveSync利用终端上网,请问如何实现?谢谢!…

查看全部问答>

请教在qte中的designer图形设计中如何把图片设为背景图跟覆盖按钮?

请教在qte中的designer图形设计中如何把图片设为背景图跟覆盖按钮?小妹刚接触qte什么都不懂,拜求高手,谢谢!…

查看全部问答>

开发板推荐

一款产品,处理器用三星的S3C2440,ARM9内核,在操作系统的选择上有些犹豫,是选择WinCE5.0呢还是较新的6.0,请内行指点。另外,想买开发板,看到网上有很多,烦请推荐国内性价比高的开发板厂家。先谢啦!!…

查看全部问答>

我在开发一个WINCE应用的时候碰到的问题..

由于代码非常多, 所以只简单罗列下我的问题代码: Struct SomeStruct {         Wchar_t test[50]; }; Class child3 : FatherClass {         Public:             ...…

查看全部问答>

怎么实现MC1000启动后启动某程序/?

   我现在做了一个MC1000下开发的程序,我现在希望每次启动系统后可以自动启动该程序.…

查看全部问答>

关于外扩ram的问题(新手)

我刚开始接触dsp,想问问个位大哥关于2407的外部ram扩展时: 扩展CY7C1021时 1、为什么A15管脚LF2407要用一个逻辑阵列芯片:GAL16V8,而F2407啥都不用呢? 2、为什么DS、PS、CS的连接LF2047要用GAL16V8,而F2407用廉价的74H08就行了呢。…

查看全部问答>

ti 运放稳定性分析(全集)

ti 运放稳定性分析(全集)…

查看全部问答>