历史上的今天
返回首页

历史上的今天

今天是:2024年08月22日(星期四)

正在发生

2018年08月22日 | 89 C语言预处理指令总结

2018-08-22 来源:eefocus

预处理指令是以#号开头的代码行,#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符,整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。

下面是本章涉及到的部分预处理指令:

指令说明
#空指令,无任何效果
#include包含一个源代码文件
#define定义宏
#undef取消已定义的宏
#if如果给定条件为真,则编译下面代码
#ifdef如果宏已经定义,则编译下面代码
#ifndef如果宏没有定义,则编译下面代码
#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif结束一个#if……#else条件编译块


预处理功能是C语言特有的功能,它是在对源程序正式编译前由预处理程序完成的,程序员在程序中用预处理命令来调用这些功能。

宏定义可以带有参数,宏调用时是以实参代换形参,而不是“值传送”。

为了避免宏代换时发生错误,宏定义中的字符串应加括号,字符串中出现的形式参数两边也应加括号。

文件包含是预处理的一个重要功能,它可用来把多个源文件连接成一个源文件进行编译,结果将生成一个目标文件。

条件编译允许只编译源程序中满足条件的程序段,使生成的目标程序较短,从而减少了内存的开销并提高了程序的效率。

使用预处理功能便于程序的修改、阅读、移植和调试,也便于实现模块化程序设计。


推荐阅读

史海拾趣

奇力新(chilisin)公司的发展小趣事

在电感器领域,技术创新是推动产业升级的关键因素。奇力新始终将技术创新作为公司发展的核心驱动力。公司不断投入研发资金,加强与国际知名企业和研究机构的合作,推出了一系列具有自主知识产权的新技术和新产品。这些技术和产品不仅提升了奇力新的市场竞争力,还推动了整个电感器行业的升级和发展。

Epitex Inc公司的发展小趣事

Epitex Inc公司成立于XXXX年,由一群热衷于电子技术的工程师和企业家共同创立。当时,电子行业正处于快速发展的阶段,各种新技术层出不穷。Epitex的创始人看到了电子材料在半导体制造中的巨大潜力,于是决定专注于研发和生产高性能的电子材料。

在公司创立初期,Epitex面临着资金、技术和市场等多方面的挑战。然而,通过不懈的努力和持续的创新,Epitex逐渐在电子材料领域取得了突破。他们研发出了一种新型的电子封装材料,具有优异的耐热性和绝缘性能,迅速在市场上获得了认可。

Actel公司的发展小趣事

Epitex一直将品质管理作为公司的核心竞争力之一。他们建立了严格的质量管理体系,从原材料采购到生产过程的每一个环节都进行严格的控制。同时,Epitex还不断引进先进的生产设备和检测技术,确保产品的稳定性和可靠性。

此外,Epitex还非常重视员工的培训和素质提升。他们定期组织员工进行技能培训和质量意识教育,提高员工的专业素养和工作质量。这种持续改进的精神使得Epitex的产品质量得到了客户的高度认可。

GWM Associates公司的发展小趣事
检查输入信号和电源是否正常,排除外部干扰因素。同时,检查电路中的元器件是否有损坏或失效。
Crydom公司的发展小趣事
在医疗电子设备中,如心电图机、脑电图机等,用于放大微弱的生物电信号。
固驰(GUERTE)公司的发展小趣事

固驰电子深知产品质量是企业生存之本,因此始终将品质控制放在首位。公司不仅建立了完善的质量管理体系,还通过了ISO9001:2015质量管理体系认证和美国UL产品认证,这标志着固驰电子的产品质量达到了国际先进水平。此外,公司还积极申请专利,目前已拥有50项国家专利,进一步巩固了其在行业内的技术领先地位。

问答坊 | AI 解惑

再拆个山寨杀手充电器

作者:ziteng00 山寨真是不杀人不死心啊。不过外观做的很不错。 …

查看全部问答>

51单片机 休眠和唤醒 C程序

   用的stc89c52的单片机,现在需要让单片机进入休眠模式,然后被唤醒。            不知道怎么进入和唤醒,用程序怎么写?…

查看全部问答>

请问下关于QSC6085平台下的短信群发问题

我现在使用中国电信的UI界面加我们的USB数据卡,进行短信群发(7个用户),群发的用户包含数据卡本身的号码,在群发的时候,我再用7个用户中的一个或几个号码向USB数据卡发送短信(这样做就会导致USB数据卡同时收发短信的问题),那么结果会导致7个用户 ...…

查看全部问答>

为SRAM创建一个Avalon tri-strate接口时遇到的问题

用DE2的开发板,用Create New Component为SRAM创建一个Avalon tri-strate接口,data  width为16位,address  width为18位,其他还有byteenable_n ,chipselect_n ,read_n ,write_n  ,创建好添加到nios系统。另外nios系统还包括cp ...…

查看全部问答>

BeagleBone IO速率测试

作者:chenzhufly QQ:36886052 ( 转载请注明出处)BeagleBone的IO控制可以见我发的这个帖子:Linux下AM335X的GPIO控制https://bbs.eeworld.com.cn/thread-327156-1-2.html 测试代码:#include <stdlib.h>#include <sys/types.h>#include ...…

查看全部问答>

电能计量芯片CS5460

通过串行总线和主机通讯。。找过资料,在开始测量前,需要设置配置、控制、状态、中断等寄存器。。。配置完成后,发送启动转换指令开始转换。。。然后通过主机发送读寄存器指令,返回相应的值。。。这种思路对吗?? 还有,它返回都是瞬时电压、电 ...…

查看全部问答>

奋斗,实现梦想

你完全可以不再愤青,不用羡慕,只需要通过自己的努力,创造属于自己的明天。 我们的创业团队,有全球领先的产品,目前只缺少一位FPGA开发人员。 需要一定的经验,更需要一颗奋斗的心。 有兴趣请联系ywf_2002@163.com…

查看全部问答>

《MCU工程师炼成记》印刷错误7

P136中间程序 [ 本帖最后由 qinkaiabc 于 2013-10-26 09:01 编辑 ]…

查看全部问答>

崩溃了,这不科学~

如图所示,TA在红色语句处进入中断,但我程序里MC0还未置1,此时查看TA的寄存器,MC0和MC1也都为0,为什么会这样呀?怀疑程序里某处MC0置1,所以导致CCIE置1时,立刻进入中断,那寄存器里MC0和MC1不应该为0呀,实际中,我检查了半天也没找到,泪 ...…

查看全部问答>

通常fpga和arm高速通信各位一般用什么方式

通常fpga和arm高速通信各位一般用什么方式 \0\0\0eeworldpostqq…

查看全部问答>