当前位置: 首页 > news >正文

C语言预处理指令全解析

第六章 预处理命令在c语言中所有# 开头的指令被称为预处理指令。gcc 编译预处理 所有的预处理指令都要在这步处理完汇编编译连接#include包含头文件。 全局变量的声明函数的声明 自定义构造类型声明 别名 宏名。 本质会把被包含的文件的内容复制过来。#include stdio.h #include stdio.h ,表示 在系统头文件的目录下查找。 非用户定义的头文件 。 /usr/include 编译器会先在当前目录(a.out 所在的目录)下查找头文件 在去系统目录下查找 。 不要包含.c 文件多文件编程 .c .h 的模板。#define宏定义指令宏只是代码替换中间不会进行任何数据 计算操作宏在定义的时候 尽量加圆括号 。不带参宏#define PI 3.14#define M 50// #define 宏名 宏值 // 宏值如果是一个表达式的话 最好都使用圆括号包起来 #define N ((M)(M))int main() { double r 7.1234; double area r*r *PI; printf(area is %f\n,area);int num 0 ; num N*N; // 5050 * 5050 printf(num is %d\n,num); return 0;}2.带参宏#define MAX(x,y) ((x)(y)? (x):(y)) #define MAX3(x,y,z) MAX(MAX((x),(y),(z)) #define ADD(a,b) ((a)(b)) main() { int a 10; int b 20; int ret MAX(a,b); printf(max is %d\n,ret); ret ADD(34,5); // ab 345 printf(add is %d\n,ret); }带参宏函数参数没有类型没有返回值本质代码替换有返回值参数有类型没有参数传递的概论本质就是替换。预处理阶段完成值传递地址传递实参形参消耗内存如果调用的多会导致代码变大。运行的时候加载代码只有一份。没有传参的过程没有跳转的过程。有参数传递就有内存开销。适用于 功能简单的场景功能复杂多行代码// 带参宏 #define MAX(x,y) ((x)(y)? (x):(y)) #define ADD(a,b) ((a)(b)) #define LENTH(r) (2*(PI)*(r)) #define PRINT(a,b,c) do{\ printf(a is %d\n,a);\ printf(b is %d\n,b);\ printf(c is %d\n,c);}while(0) int main() { int a 10; int b 20; int ret MAX(a,b); printf(max is %d\n,ret); ret ADD(34,5); // ab 345 printf(add is %d\n,ret); PRINT(1,2,3); return 0; }条件编译,宏开关#if #elif #else #endif #ifdef #ifndef #if 0 #if 条件 3.0 VERSION 判断条件的真假 决定#if 和#endif 之间的代码是否要预处理 #endif #define DEBUG 1 #if DEBUG 调试相关的代码 在程序调试过程中需要显示的。 如果是正式程序不需要显示 #endif #if DEBUG 如果DEBUG 这个为真值 在#if 和#else 之间就要被预处理 #else 否则 #else 和#endif 要被预处理 #endif #if DEBUG 预处理1 #elif 条件2 预处理2 #else 预处理3 #endif // 一般出现在头文件用于保证#ifndef 和#endif 之间的预处理在a.out 只会预处理一次 如果__ADD_H_ 没有被定义过则定义这个宏预处理语句就会被执行。 如果__ADD_H_ 被定义过则#ifndef 和#endif 之间的就不会被预处理。 #ifndef __ADD_H_ #define __ADD_H_ 预处理 #endif 如果 这个宏被定义过__ADD_H_ 则预处理 会被执行。 一般用于代码中的一些选配功能。 #ifdef __ADD_H_ 预处理 #endif
http://www.gsyq.cn/news/1380508.html

相关文章:

  • AI算法工程师必学的Python库:这10个库,AI开发必备
  • 匠心铸精品 护航海塘安澜 —— 天津水阀机械有限公司圆满交付三门县海塘加固工程大口径阀门产品
  • SpringCloud中Eureka的pom文件jdk17配置
  • Claude Code 项目全生命周期管理实战指南
  • WarcraftHelper:魔兽争霸3现代适配的终极解决方案
  • 硕博冲刺期必看:文献阅读软件哪个好用?Scholaread多篇对比阅读实测 - nut-king
  • 无锡综合实力宣传片服务商好评排行 全维度实力解析 - 奔跑123
  • 开源电子吹管REMI DIY指南:从Arduino到音乐合成全解析
  • AI 营销时代,关键词布局是企业最保值的资产
  • 全网最通俗易懂 JVM 入门教程:从原理到实战,新手也能秒懂
  • 邯郸装修深度解析|装修公司怎么选不踩坑?为什么更多邯郸业主认准辉煌装饰? - 博客万
  • 从复平面几何到Python代码:可视化理解NumPy中angle()函数的计算原理(附绘图代码)
  • 英雄联盟回放播放难题终极解决方案:ROFLPlayer完整使用指南
  • 代付模式?
  • TV Bro电视浏览器:让智能电视变身全能上网终端
  • 武汉宠物医院行业发展现状解析及优质机构盘点 - 品牌评测官
  • 从Stable Diffusion到DiT:为什么说Transformer是扩散模型的下一站?
  • 还在手动触发Lindy子任务?这6个隐藏API+3个低代码集成技巧,今天就能上线全自动流水线
  • 分布式机器学习与CPU调度协同优化:算法原理与工程实践
  • ChartGPT深度剖析:AI驱动的自然语言图表生成架构设计与技术实现
  • 杰理之苹果唤醒siri后关闭siri,安卓播歌不恢复【篇】
  • 秋招拿到三个offer,我选了给钱最多的那个,入职第一天就想扇自己
  • D2DX:让经典《暗黑破坏神2》在现代电脑上焕发新生的终极解决方案
  • Python模拟键盘操作踩坑实录:从微信自动发消息到打包成EXE的完整避坑指南
  • Openclaw通过图生图+数字人技能快速生成带货视频
  • NxDumpTool专业备份解决方案:Switch游戏数据完整提取技术实现
  • 从天线设计到芯片封装:HFSS中‘辐射边界’与‘PML层’到底该怎么选?实战配置详解
  • AI专著撰写必备!AI写专著工具一键生成20万字专著,附带专业框架!
  • 鼎讯AM-601光纤熔接机:交通通信建设与维护的可靠伙伴
  • H3C VSR路由器实战:用QoS策略给不同VLAN用户打DSCP标签(附配置命令详解)