环球快报:预处理指令用法详解(C语言)
2023-02-14 01:04:59 来源:腾讯云
前言
使编译器执行预处理操作的代码被称为预处理指令,本文介绍常见的预处理指令的实际用法。
一、预处理符号
预处理符号是C语言内置的符号,是可以直接使用的。
其中,若遵顼ANSI C,则__STDC__
为1,否则未定义。
(资料图)
二、#define
1)定义标识符
#define可以用来定义标识符,其语法为:#define name stuff
,经过预处理后,stuff
会被直接替换为·name
。
若stuff
的内若过长,可在句末加上\
续行符号,像这样:
#include#define Piccaso "Pablo,Diego,José\Francisco,de,Paula,Juan,Nepomuceno\,María,de,los,Remedios,Cipriano,de\,la,Santísima,Trinidad,Ruiz,y,Picasso"int main(){printf("%s", Piccaso);return 0;}
示例1:数值替换
int main(){int a = 100;return 0;}
示例2:循环替换
#includeint main(){while(1){printf("A");}return 0;}
运行代码,将会在屏幕上死循环地打印A
。
示例3:分支替换
int main(){int input = 0;switch (input){case 1:break; case 2:break; case 3:}return 0;}
2)宏定义
#define允许有参数的文本替换,这种操作通常称为宏,其语法为:#define name(list) stuff
,其中,list
是由逗号隔开的符号表,符号有可能出现在stuff
中。
示例1:
int main(){printf("%d", 5+5);return 0;}
示例2:
int main(){printf("%d", 10*double(5+1));return 0;}
因为#define
的功能只是替换,若要利用宏定义实现快捷的函数操作,最好的方法是在宏定义时多加括号,以便于达到整体求值的效果,像这样:#define double(x) (x)+(x)
。
注意:由于宏是直接替换,因此传参时严禁使用自增,自减,传参时使用,替换后依然会再次执行,会导致不可预测的后果。
3)字符串转换符
字符串有自动连接的特点,例如运行以下这段代码:
#includeint main(){printf("123" "456");return 0;}
效果图:
字符串转换符#就是利用这个特性,它可以将宏定义中传入的参数,替换为字符串格式。
#include#define sum(x) printf("the val of "#x" is %d",x)int main(){int a = 10;sum(a);return 0;}
在上述代码中,#号
将a
直接转化为字符串,随后三个字符串拼接在一起。
效果图:
利用该方法可以只传参一次实现值和名
同时打印。
4)片段链接符
在宏定义时,片段连接符##
可以实现将两个符号连接在一起,使其成为一个符号,前提是这个合成的符号必须已经被定义。
#include#define double(x) sum##x*=2int main(){int sum1 = 1;int sum2 = 1;int sum3 = 1;double(1);printf("%d %d %d", sum1, sum2, sum3);return 0;}
在上述代码中,##
会把sum和参数x连接在一起,当我们传入1经过预处理后,等效于:sum1*=2
。
效果图:
5)宏定义VS函数
宏定义的优势:
宏定义的执行速度远远超过函数,当执行简单的计算时,更适合使用宏定义。宏定义传参时没有类型检测,可以将任意的数据传入。宏定义是直接替换,可以传入各种各样的符号,实现许许多多函数做不到的功能。(可以传入类型、传入函数、传入语句等等)宏定义的劣势:
宏定义不能调试、不能递归,因此宏定义只适合做简单的计算。宏定义是直接替换,因此相邻操作符的优先级很有可能产生不期望的顺序,因此要尽可能带括号。宏定义传参没有类型检测,因此不够严谨。6)命名公约
以下几条公约,必须遵守
宏定义的名必须全部大写。函数名不可以全部大写。三、#undef#undef
宏定义删除,可以在函数内部使用!被删除后的标识就不能再使用了。
四、命令行编译
指在VScode
或Linux
等用命令行执行编译的环境下,可以在编译时对变量进行赋值。
五、条件编译
在写程序时,有些代码是为了查看某个部分是否正确而写的的调试代码。
删除很可惜,但又不想让其编译,此时就可以使用选择性编译
。
但实质上使用if
语句或直接注释
会更加方便,但在C语言内置的头文件中,为了节约时间经常使用条件编译。
1)常量表达式判断
#if 常量表达式//...#endif
常量表达式为真,则中间的语句编译;
常量表达式为假,则中间的语句不编译。
此外,也可以写成多分支的表达式条件编译。
int main(){#if 0printf("111");#elif 1printf("222");#else 0printf("333");#endifreturn 0;}
效果图:
2)是否定义判断
判断某个符号是否被定义,只要被定义,就编译中间的语句,无论其被定义为什么。
#include#define MAXint main(){#if defined(MAX)//或#ifdef MAXprintf("111");#endifreturn 0;}
或判断某个符号是否没定义,没定义则编译。
#include#define MAXint main(){#if !defined(MAX)//或#ifndef MAXprintf("111");#endifreturn 0;}
3)嵌套判断
条件编译是可以互相嵌套的。
#include#define DEBUG int main(){#ifdef DEBUG#if 1printf("111");#elif 0printf("222");#endif#endif return 0;}
如上述代码是在是否定义判断中嵌套常量表达式判断。
效果图:
六、头文件的包含
1)双引号与尖括号
对于#include
来说,后面的文件有两种引用方法:
所有的头文件在包含时都可以使用双引号,但为了速度和区别位置,建议自己写的头文件用双引号,标准库中的用尖括号。
2)头文件的嵌套包含
可以将许许多多的头文件都包含在一个自己创建的头文件中,最后只需要在其他的源文件中包含该自己创建的头文件即可,像这样:
3)头文件重复包含解决方法
在写多人合作的大型项目时,每个程序员可能都要包含一次公用的头文件,当他们写的代码汇总时,这个头文件可能会被包含多次。
因此,我们使用条件编译来解决这个问题。
#if !defined(TIME)#define TIME //...//... //在这里实现各种函数//...#endif
假设上述代码为head.h
,当我们第一次包含head.h
时,由于TIME没有被定义,因此会定义一个TIME,同时编译里面的函数。
当我们第二次包含head.h
时,因为TIME被定义过了,即使head.h
里面的内容被拷贝到源文件中,也不会进行编译,从而加快了速度。
注意:在头文件开头加入#pragma once
即可一键实现上述效果,不必冗杂的代码,但仅限于自己写的头文件,标准库的头文件已经帮你加完了。
感谢您的阅读与耐心~
标签: 编程算法
相关阅读
- (2023-02-14)环球快报:预处理指令用法详解(C语言)
- (2023-02-13)为什么那么多人很讨厌井上织姬
- (2023-02-13)积成电子:在风电并网业务方面 公司可提供新能源发电自动化解决方案
- (2023-02-13)世界速读:双鹭药业:公司之前主要产品以注射剂为主 全部为处方药
- (2023-02-13)今日播报!明牌珠宝:公司拟投资实施光伏电池项目
- (2023-02-13)君实生物:公司与合作伙伴将尽快启动与药物监管部门就创新药的新药上市申请沟通
热点推荐
- (2023-02-14)环球快报:预处理指令用法详解(C语言)
- (2023-02-13)为什么那么多人很讨厌井上织姬
- (2023-02-13)积成电子:在风电并网业务方面 公司可提供新能源发电自动化解决方案
- (2023-02-13)世界速读:双鹭药业:公司之前主要产品以注射剂为主 全部为处方药
- (2023-02-13)今日播报!明牌珠宝:公司拟投资实施光伏电池项目
- (2023-02-13)君实生物:公司与合作伙伴将尽快启动与药物监管部门就创新药的新药上市申请沟通
- (2023-02-13)圣农发展:2022年是公司圣泽901父母代的销售元年 主要以产品推广工作为主
- (2023-02-13)诚即勇兮又以武 终刚强兮不可凌_诚既勇兮又以武终刚强兮不可凌晟是什么意思|全球独家
- (2023-02-13)谨防被骗!官方公告来了
- (2023-02-13)AI新物种ChatGPT引全球股市狂飙,商业闭环尚需时日,盈利模式是重点-今日讯
- (2023-02-13)华人健康IPO:营收净利连年快增 “一体两翼”多业务相互协同 世界热文
- (2023-02-13)【世界报资讯】“超级牛散”陈发树、刘益谦等出手!凭这一只重仓股暴赚4亿,最新锁定以下“新目标”……
- (2023-02-13)全球消息!网络术语lb是什么意思
- (2023-02-13)民法典委托代理人的范围
- (2023-02-13)节后招工热潮起 春季攻坚招聘忙
- (2023-02-13)“电力”服务产业助力乡村振兴
- (2023-02-13)全球看点:锦旗背后的故
- (2023-02-13)世界新动态:山东岱岳区粥店街道高质量发展谱新篇
- (2023-02-13)江苏沭阳章集街道以党建观摩检验冬训硕果
- (2023-02-13)高能环境:重庆耀辉综合利用项目成功路演,资源化布局打造成长加速器 世界热闻
- (2023-02-13)热点评!数据通|机构资金大幅流入白酒工程机械板块,贵州茅台获流居首
- (2023-02-13)集泰股份:公司在安庆市计划建设光伏胶、电子胶等产品的生产车间_当前信息
- (2023-02-13)世界速讯:申通地铁:申凯公司立足长三角 积极拓展国内及海外市场
- (2023-02-13)光力科技:目前公司的各型号国产划片机设备已经处于量产销售阶段
- (2023-02-13)未央今日播报:北交所两融业务启动 今年已有5家支付机构离场
- (2023-02-13)密迪斯肌(08307.HK)前三财季由盈亏至311.6万港元
- (2023-02-13)证通电子:抖音目前入驻公司数据中心_当前快看
- (2023-02-13)川大智胜:公司自主研发软件主要应用于航空与空中交通管理、三维测量与人脸识别等领域
- (2023-02-13)播报:广州浪奇:公司有与多家零售渠道、大型门店、经销商等深度合作
- (2023-02-13)全球动态:华电重工:公司已完成大容量碱性电解水制氢装置和部分氢能核心材料的开发
- (2023-02-13)思创医惠:公司将NLP相关技术应用于智慧睡眠中心、认知障碍疾病诊断等临床应用|焦点热讯
- (2023-02-13)异地跨行取款手续费怎么算?跨行不收手续费6大银行
- (2023-02-13)交通银行信用卡注销方法 交通银行信用卡怎么销卡销户?
- (2023-02-13)环比和同比的区别是什么?今年比去年是同比还是环比?
- (2023-02-13)环球速看:天奇股份:公司智能装备板块主要产品包括可应用于人形机器人生产制造的装配线
- (2023-02-13)老白干酒:公司五家白酒企业均是地方区域酒企
- (2023-02-13)亚康股份:公司拥有上千家互联网企业客户 包括阿里巴巴、腾讯等-每日热门
- (2023-02-13)东莞今年这样拼经济:超七成用地指标用于产业项目,培育50家“单项冠军”
- (2023-02-13)全国首个将九价HPV疫苗纳入适龄女孩接种计划城市正式落地
- (2023-02-13)江西这地雨夹雪!降温在即 天天视点
- (2023-02-13)车贷计算公式及方法 36期车贷利息计算器
- (2023-02-13)个人养老金账户是什么意思?个人账户养老金指的是什么意思?
- (2023-02-13)市场表现尚可 预计本月燃料油价格有回升空间 焦点消息
- (2023-02-13)【全球报资讯】案值27亿元!大连海关查获伪报品名走私燃料油案
- (2023-02-13)动态:福斯达:公司在部分产品生产工艺方面采用自动流水线等
- (2023-02-13)天天讯息:孩子王:公司可转债项目正在审批过程中
- (2023-02-13)全球今日讯!祖名股份:公司的预制菜仍在小试中 未来不排除收购预制菜企业的可能
- (2023-02-13)焦点信息:机构:低硫燃料油短期利空因素有限
- (2023-02-13)原油持续区间震荡支撑成本端 燃油下探空间不大-全球快播报
- (2023-02-13)当前热点-豪森股份:蜂巢为公司在新能源领域重要客户 在多领域双方均有合作
- (2023-02-13)协鑫能科:极寒地区重卡换电技术取得重要突破 首批站点将在新疆、内蒙古、山西、河北陆续落地
- (2023-02-13)1月信贷迎“开门红”,释放经济加快复苏信号
- (2023-02-13)全球速递!拓尔思:乡村振兴领域 公司推出了“麦文智创”云服务
- (2023-02-13)一份榜单,揭示了中国城市经济44年变迁的奥秘 全球头条
- (2023-02-13)中国平安2023年"青少年科技素养提升计划"正式启动 环球报资讯
- (2023-02-13)克服不了这三点,ChatGPT就无法取代金融从业者 天天讯息
- (2023-02-13)多家银行回应:未收到房贷年龄可延长至80岁的通知_世界要闻
- (2023-02-13)嘉化能源:公司PVC产能30万吨/年 产能利用充分
- (2023-02-13)富临运业:公司天府行平台的合作企业已覆盖四川省内18个地市州和重庆市
- (2023-02-13)海顺新材:公司针对不同的客户储备了干法和热法两种工艺 环球速讯
- (2023-02-13)排查清理隐患为园区交通安全保驾护航
- (2023-02-13)党建引领“三城”创建暖民心_每日热文
- (2023-02-13)全民阅读 书香支部-环球今日报
- (2023-02-13)总投资24亿元!正镶白旗招商引资迎来“开门红”
- (2023-02-13)繁昌经开区15家企业入选安徽省创新型中小企业
- (2023-02-13)永和智控:公司发展光伏电池产业将主要拥有N型晶硅电池的相关专利技术|天天通讯
- (2023-02-13)英威腾:公司未来规划建设以中山为华南基地
- (2023-02-13)世界快消息!海顺新材:公司铝塑膜规划产能是1.2亿平方米
- (2023-02-13)浪漫相亲约会、超值爆品优惠 京东线下门店实在福利助攻节日甜蜜氛围
- (2023-02-13)天天快看点丨富春股份:上海骏梦自主研发的手游《星之觉醒》2月获得游戏版号
- (2023-02-13)电投能源:通辽百万风电项目计划今年年底前全部并网发电 每日播报
- (2023-02-13)民初案件立案后怎么查_民初案件查询
- (2023-02-13)574是什么意思?女生发51078数字寓意什么?
- (2023-02-13)网络用语ydl什么意思?dly网络用语是什么意思?
- (2023-02-13)每日动态!益生股份:公司引进的白羽肉鸡品种为哈伯德"利丰"新品系种鸡
- (2023-02-13)达实智能:公司人工智能技术已用在大型建筑、地铁、数据中心等多个项目 速讯
- (2023-02-13)观察:恒锋信息:公司在数字乡村领域有智慧农业、智慧溯源等成熟产品
- (2023-02-13)一键布局能源投资新领地 绿电50ETF今日重磅发行
- (2023-02-13)熵基科技:公司有自主知识产权的MinervaIoT熵基云物联网开放PaaS平台
- (2023-02-13)焦点速讯:云南开展“十项行动”助力金融服务实体经济
- (2023-02-13)环球简讯:同方股份:公司已承接中核集团内多个数字化业务 订单金额合计超千万
- (2023-02-13)法兰泰克:2022年公司签署了超2亿元酿酒机器人订单
- (2023-02-13)捷邦科技:公司掌握碳纳米管浆料制备全链条核心技术|环球微速讯
- (2023-02-13)每日看点!多伦科技:公司已顺利结项封闭和半开放条件下智能车路系统测试项目
- (2023-02-13)ChatGPT要「干掉」的理财师?蚂蚁财富却在扩招
- (2023-02-13)全球新动态:硅谷媒体:华尔街2023年“云”趋势
- (2023-02-13)东方雨虹TPO,全力全速向未来
- (2023-02-13)全球讯息:周鸿祎200亿豪赌ChatGPT?
- (2023-02-13)熟男是什么意思?鲜肉男是什么意思啊?
- (2023-02-13)福州真龙什么梗?真龙黄色烟盒是什么烟?
- (2023-02-13)498是什么意思?爱情数字暗示大全
- (2023-02-13)BATJ是什么意思?batj是啥?能干什么?
- (2023-02-13)环球视点!中国石油广东石化项目在揭阳投料试车一次成功
- (2023-02-13)担忧供应持续收紧,油价上行_世界信息
- (2023-02-13)千万吨级炼化一体化项目进入全面试产阶段 快资讯
- (2023-02-13)热点追踪 | 横向对比,这些低估公司更胜一筹
- (2023-02-13)老马茶室 | ChatGPT、AIGC炒作近尾声,泛科技类题材板块有机会
- (2023-02-13)【天天快播报】新疆焉耆开展小微企业质量管理体系帮扶活动
- (2023-02-13)全球快看:警钟长鸣 常抓不懈
- (2023-02-13)全球百事通!7分钟“红蓝星光”点亮“生命通道”