【C语言进阶篇】你真的了解预处理吗? 预处理详细解析


在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏:《C语言初阶篇》 《C语言进阶篇》

⛺️生活的理想,就是为了理想的生活!

文章目录

  • 一、预定义符号的含义
  • 二、#define
    • 2.1 #define定义标识符
    • 2.2 在define定义标识符的注意事项
  • 三、#define 定义宏
  • 📝全篇总结

一、预定义符号的含义

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

这些预定义符号都是语言内置的,每一个都有它独特的含义。
📚 代码演示:

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

__FILE__ 指编译的源文件 , __LINE__ 指文件当前的行号,所以这段代码打印的就是是当前文件的名称加行号。

二、#define

2.1 #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__ ,       \
__DATE__,__TIME__ ) 

2.2 在define定义标识符的注意事项

很多人以为#define的定义是一个语句,所以就想当然的给加上了一个语句但是这样就会变成造成很多语法错误,define是替换的作用并不是一条语句

📑示例:

#define MAX 1000;
#define MAX 1000

这样就会导致下面这个情况从而引发语法错误!

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

执行的时候max = MAX;会被替换为max =1000;;,从而导致语法错误

三、#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.hqwc.cn/news/294439.html

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

相关文章

Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时,动态变化时无法及时刷新更新适配界面的问题

Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时,动态变化时无法及时刷新更新适配界面的问题 目录 Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时,动态变化时无法及时刷新更新适配界面的问题 一、简单介绍…

代码图形注释自动生成(通过文字图像)

0. 简介 大家在学(CTRL)习(C)别人代码的时候,看到别人的代码程序,在日志中有很多很酷的代码注释,或者是有一些图形化注释方便理解。之前本人以为都是一个个手敲出来的。然后在网上一番搜索&…

Unity头发飘动效果

Unity头发飘动 介绍动作做头发飘动头发骨骼绑定模拟物理组件 UnityChan插件下载UnityChan具体用法确定人物是否绑定好骨骼节点(要做的部位比如头发等)给人物添加SpringManager骨骼管理器给骨骼节点添加SpringBone这里给每个头发骨骼都添加上SpringBone。…

【Python必做100题】之第二十五题(统计字符)

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数 代码如下: string input("请输入字符串:")char 0 number 0 space 0 other 0for i in string:if i.isalpha():char 1elif i.isdigit():number 1eli…

springboot集成springdoc-openapi(模拟前端请求)

目录 描述---痛点 Springfox对比springdoc-openapi 1. 成熟度和维护性: 2. 依赖和配置: 3. 注解和使用方式: 4. 特性和扩展性: 应用目录结构 pom文件 新增测试controller StaffController YUserController 启动测试看下…

亚马逊品牌分析ABA功能有哪些?亚马逊选品的量化标准有哪些?——站斧浏览器

亚马逊品牌分析ABA功能有哪些? 1、品牌市场份额(Share of Voice) ABA提供了品牌在特定类别中市场份额的详细数据。这一模块帮助品牌所有者准确评估其品牌在整个市场中的竞争地位和表现。通过了解市场份额,品牌方可以制定更具针对…

Guava的TypeToken在泛型编程中的应用

第1章:引言 在Java世界里,泛型是个相当棒的概念,能让代码更加灵活和类型安全。但是,泛型也带来了一些挑战,特别是当涉及到类型擦除时。这就是TypeToken大显身手的时候! 作为Java程序员的咱们,…

Epson爱普生手臂机器人与PC通讯 C#

一、Epson手臂配置 1.安装Epson手臂控制软件 安装Epson手臂控制软体EPSON RC+ 7.0(根据实际需求下载应用),可以去官网下载安装。 2.硬件配置 准备一台PC,用网线连接PC和EPSON手臂控制器。 3.在PC上修改IP地址 EPSON手臂默认IP(192.168.0.1),PC IP改为手臂同一网段…

MFC使用高速绘图控件high-speed Charting Control绘制柱形图

1. 创建MFC单文档工程BarChartDemo。 2. 在工程文件夹下新建文件夹ChartCtrl,将ChartCtrl源码放入,如下图所示。在工程中添加这些项,项目——添加——现有项,全部添加。 3. 添加一个对话框,ID为IDD_DLG_BAR,类名为CBarDlg。 4. 在对话框中添加Custom Control控件,将控…

业务框架概念及极简史

概念 ● 我们通过在“什么是业务”章节对业务的概念有个较为明确的认知,业务就是企业的经营活动。架构,也是等同于企业架构中的架构概念,架构就是 输出某种价值的主题,里面的配置:各种元素,元素之间的关系…

一个简单的获取显示器长宽和显示器分辨的代码

最近在做大屏显示&#xff0c;在现显示的时候有些显示器是不规则的&#xff0c;投到大屏上显示效果不好&#xff0c;可以直接获取显示器的分辨率&#xff0c;本地调整好&#xff0c;再直接部署。 <!DOCTYPE html> <html lang"en"> <head><meta …

LT8711UX,LT8711UXC ,LT8711UXD ,LT8711UXE1,LT8711UXE2的区别,选型的工程师注意了!!!

LT8711UX,LT8711UXC ,LT8711UXD ,LT8711UXE1,LT8711UXE2做为龙迅的重点物料&#xff0c;大家都不陌生。 可是它们不一样的后缀&#xff0c;又有什么不一样的应用区别呢&#xff1f; LT8711***均为DP/Type-C to HDMI系列的芯片。 LT8711UX&#xff0c;是一款带音频的Type-C…