第24讲:预处理详解

文章目录

  • 1. 预定义符号
  • 2. #define定义常量
  • 3. #define定义宏

1. 预定义符号

C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。

__FILE__ //进⾏编译的源⽂件
__LINE__ //⽂件当前的⾏号
__DATE__ //⽂件被编译的⽇期
__TIME__ //⽂件被编译的时间
__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义

举个例⼦:

printf("file:%s line:%d\n", __FILE__, __LINE__);

2. #define定义常量

基本语法:

#define name stuff

举个例⼦:

#define MAX 1000
#define reg register //为 register这个关键字,创建⼀个简短的名字
#define do_forever for(;;) //⽤更形象的符号来替换⼀种实现
#define CASE break;case //在写case语句的时候⾃动把 break写上。
// 如果定义的 stuff过⻓,可以分成⼏⾏写,除了最后⼀⾏外,每⾏的后⾯都加⼀个反斜杠(续⾏符)。
#define DEBUG_PRINT printf("file:%s\tline:%d\t \date:%s\ttime:%s\n" ,\__FILE__,__LINE__ , 		\__FILE__,__LINE__ , 

思考:在define定义标识符的时候,要不要在最后加上 ; ?
⽐如:

#define MAX 1000;
#define MAX 1000

建议不要加上 ; ,这样容易导致问题。
⽐如下⾯的场景:

if(condition)max = MAX;
elsemax = 0;

如果是加了分号的情况,等替换后,if和else之间就是2条语句,⽽没有⼤括号的时候,if后边只能有⼀条语句。这⾥会出现语法错误。

3. #define定义宏

#define 机制包括了⼀个规定,允许把参数替换到⽂本中,这种实现通常称为宏(macro)或定义宏(define macro)。

下⾯是宏的申明⽅式:

#define name( parament-list ) stuff

其中的 parament-list 是⼀个由逗号隔开的符号表,它们可能出现在stuff中。

注意:
参数列表的左括号必须与name紧邻,如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分。

举例:

#define SQUARE( x ) x * x

这个宏接收一个参数x,如果在上述声明之后,你把SQUARE( 5 );置于程序中,预处理器就会用下面这个表达式替换上面的表达式:5 * 5 。

警告:
这个宏存在一个问题:
观察下面的代码段:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『 Linux 』目录与软硬链接 (万字详解)

文章目录 如何理解目录目录项 目录中的权限问题根目录Dentry缓存文件的增删改查与文件系统关系软硬链接软链接硬链接 如何理解目录 目录是一个文件存在其对应独立的Inode; $ stat dirFile: ‘dir’Size: 4096 Blocks: 8 IO Block: 4096 directory Device: f…

杂谈k8s

其实看我之前的博客,k8s刚有点苗头的时候我就研究过,然后工作的时候间接接触 也自己玩过 但是用的不多就忘记了,正苦于不知道写什么,水一篇 简化容器应用程序的部署和管理 自动化部署、自动伸缩、负载均衡、存储管理、自我修复 支…

对系统管理员有用的 NMAP 命令

NMAP 是一个极其强大的网络扫描、监视和漏洞管理工具。 NMAP 命令的典型格式如下。 nmap -function --script脚本名称 <目标> 目标可以是主机 (192.168.0.1) 或网络 (192.168.0.0/24) 典型开放端口&#xff08;服务&#xff09;扫描 nmap -sV <目标> nmap -sV &…

springboot日志文件不生产问题

当指定了日志文件logback-spring.xml&#xff0c;发现项目启动的时候&#xff0c;不生产日志 解决方案&#xff1a;在yml中指定本工程具体的日志文件 logging:config: classpath:logback-spring.xml如果还是不产生日志文件的话&#xff1a;指定磁盘上具体的目录即可&#xff…

Redis几种部署模式介绍

Redis 提供了几种不同的部署模式&#xff0c;以满足不同的使用场景和可用性需求。这些模式包括单机模式、主从复制、哨兵模式和集群模式。下面我将简要介绍每种模式的特点和用途&#xff1a; 单机模式&#xff1a; 描述&#xff1a;单个 Redis 服务器实例运行在一台机器上&…

Linux中的head命令:快速查看文件头部内容

Linux中的head命令&#xff1a;快速查看文件头部内容 在Linux和Unix系统中&#xff0c;head命令是一个非常实用的工具&#xff0c;它允许用户查看文件的开头部分。无论你是在处理日志文件、配置文件还是其他大型文本文件&#xff0c;head命令都能帮助你快速定位并查看文件的前…

数据管理考核,如何避免陷入“形式主义”

当企业颁布了越来越多的管理制度和规范标准&#xff0c;面临的一个核心问题&#xff0c;就是从上到下无论是领导&#xff0c;中高层还是员工有没有去执行。我们常常的做法就是进行巡检考核&#xff0c;通过排名奖惩的方式去推动大家落地执行。 我们在执行考核排名的过程中&…

每天一个数据分析题(三百四十九)

销售人员的业绩表现直接影响企业的盈利水平&#xff0c;以下可以用来描述销售人员业绩情况好坏的指标是 A. 目标完成率 B. 目标比差异百分比 C. 均比差异百分比 D. 标准比差异百分比 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案

STM32 HAL库开发——入门篇(3):OLED、LCD

源自正点原子视频教程&#xff1a; 【正点原子】手把手教你学STM32 HAL库开发全集【真人出镜】STM32入门教学视频教程 单片机 嵌入式_哔哩哔哩_bilibili 一、OLED 二、内存保护&#xff08;MPU&#xff09;实验 2.1 内存保护单元 三、LCD 3.1 显示屏分类 3.2 LCD简介 3.3 LCD…

小程序vant DropdownMenu 下拉菜单无法关闭

1&#xff0c;升级版本 官方已经修复这个BUG&#xff0c;只需升级版本1.11.4及以上即可。 van-dropdown-menu 下拉菜单组件无法正常关闭 Issue #5739 youzan/vant-weapp GitHub 2&#xff0c;不升级 直接修改文件&#xff0c;找到vant\weapp\dist\dropdown-item\index.w…

深入浅出Rust所有权:手把手从零设计Rust所有权体系,掌握Rust内存管理思想的精髓

撰写编程语言发展历史过程中&#xff0c;对Rust的所有权机制的设计进行了深入的探讨&#xff0c;摘取其中的一段内容&#xff0c;邀请大家点评。 Rust的所有权机制&#xff0c;看似复杂且与现有编程语言不同&#xff0c;使用起来思路也许难以适应。是学习Rust的难点。但如果我们…

回归现实:无需复杂假设即可轻松评估过程能力的简单方法

Cpk 和 Ppk 等过程能力指标能够测量您的过程相对于客户规格要求的执行情况。我们先回顾一些能力分析基础知识&#xff0c;再深入了解另一个能力估计值 Cnpk&#xff0c;该估计值很可能在您的能力分析库中非常有用。 能力统计指标分析 能力统计指标使用单个数字&#xff0c;是一…

什么是最好的手机数据恢复软件?6 款手机数据恢复软件 [2024 年更新]

什么是最好的手机数据恢复软件&#xff1f;在这篇文章中&#xff0c;您将了解 6 款最好的免费手机数据恢复软件&#xff0c;并学习如何恢复数据的完整指南。 最好的手机数据恢复软件是什么&#xff1f; 手机数据恢复软件是恢复智能手机中丢失或删除的文件、消息、照片和其他宝…

Python入门课堂:探索编程世界的无限可能

Python入门课堂&#xff1a;探索编程世界的无限可能 在数字化时代的浪潮中&#xff0c;Python以其简洁易懂的语法和强大的功能库&#xff0c;成为了众多编程初学者的首选语言。本篇文章将带领大家走进Python的世界&#xff0c;从四个方面、五个方面、六个方面和七个方面全面解…

运筹学_8.决策论

引言 决策论是根据信息和评价准则&#xff0c;用数量方法寻找或选取最优决策方案的科学&#xff0c;是运筹学的一个分支和决策分析的理论基础。在实际生活与生产中对同一个问题所面临的几种自然情况或状态&#xff0c;又有几种可选方案&#xff0c;就构成一个决策&#xff0c;…

GaN功率电子器件中体缺陷相关机制的建模仿真研究

在电力电子器件的外延生长和器件制备过程中&#xff0c;缺陷是不可避免的&#xff0c;大量的缺陷在一定程度上会牺牲器件的击穿电压、导通电阻等性能&#xff0c;同时影响器件的可靠性。近期&#xff0c;河北工业大学和广东工业大学联合开发了缺陷相关的仿真模型&#xff0c;深…

VMware虚拟机关机报错处理办法

VMware虚拟机关机报错处理办法 ​ 在 VMware ESXi 下面强制关闭一个沒有反应的 VM 虚拟机的方法, 一般正常都是使用 vSphere Client 去控制 VM 虚拟机的电源开关, 但是有时会发生即使用里面的 Power Off 按钮但是还是无法关闭我的 VM 虚拟机, 而且最终会出现一串 错误信息「An…

github将默认分支main改为master

github将默认分支main改为master 1.进入github&#xff0c;点击setting 2.在setting中&#xff0c;选择Respositories&#xff0c;更新默认分支为master 3.选择要更新的项目&#xff0c;在项目中选择setting->general->切换默认分支

【三勾商城】新增添加自定义表单

三勾商城是开发友好的微信小程序商城&#xff0c;框架支持SAAS&#xff0c;支持发布 iOSAndroid公众号H5各种小程序&#xff08;微信/支付宝/百度/头条/QQ/钉钉/淘宝&#xff09;等多个平台&#xff0c;不可多得的二开神器&#xff0c; 为大中小企业提供极致的移动电子商务解决…

1371. 每个元音包含偶数次的最长子字符串

1371. 每个元音包含偶数次的最长子字符串 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;_1371每个元音包含偶数次的最长子字符串 错误经验吸取 原题链接&#xff1a; 1371. 每个元音包含偶数次的最长子字符串 https://leetcode.cn/pro…