别吹 你不一定会define

2023-11-08

目录

1. define的介绍

1.1   概念

1.2  补充说明

1.3  C语言预处理的三个内容

2. define的使用

2.1  define用于防止头文件重复包含

2.2  define 的定义与撤销

2.2.1  定义

2.2.2  撤销

2.3  define 一个函数, 带参数

2.3.1  写一个宏, 输入两个数返回较小的一个

2.3.2   define封装函数,出错处理

2.4  特殊符号(#、##)

2.4.1  #字符串字面量(字符串化)

2.4.2  ##拼接两个内容

2.5  define中套用define

3. define常见陷阱(笔试题)

3.1 用define定义一个参数, 表示一年中有多少秒

3.2计算下面程序的值

3.3  得到一个结构体中的偏移量

3.4  得到一个结构体成员所占用的字节数

3.5  字符大小写的转换

3.6  计算数组的大小


1. define的介绍

1.1   概念

define 宏定义, C语言预处理命令的一种, 预处理指令一般以#开头

无参宏定义形式:#define 宏名 字符串

带参宏定义形式:#define 宏名(参数表) 字符串

1.2  补充说明

替换规则:原样替换, 别用我们大脑里的思想去计算数学式子

在代码编译之前进行的处理, 具体过程是将头文件展开, 生成.i文件,

1.3  C语言预处理的三个内容

(1)宏定义

(2)头文件包含

(3)条件编译

2. define的使用

2.1  define用于防止头文件重复包含

gcc 生成.i文件, 这样就可以清晰的看到头文件展开的样子, 帮助我们理解很复杂的宏定义

解决头文件重复包含:

执行逻辑:确保每一个头文件只被定义一次

理解:

2.2  define 的定义与撤销

2.2.1  定义

2.2.2  撤销

2.3  define 一个函数, 带参数

2.3.1  写一个宏, 输入两个数返回较小的一个

2.3.2   define封装函数,出错处理

不加do while语句也可以

\,换行告诉编译器我这行没写完, 内容在下一行。

2.4  特殊符号(#、##)

2.4.1  #字符串字面量(字符串化)

字符串之前有很多空格, 自动删除

2.4.2  ##拼接两个内容

在底层当中使用, 拼接各种外设的名字

2.5  define中套用define

遵循原样展开的前提即可

3. define常见陷阱(笔试题)

3.1 用define定义一个参数, 表示一年中有多少秒

涉及到计算的地方用括号括起来

3.2计算下面程序的值

注意加不加括号的区别, 强调一定要原样替换之后把式子写出来在计算

3.3  得到一个结构体中的偏移量

3.4  得到一个结构体成员所占用的字节数

3.5  字符大小写的转换

3.6  计算数组的大小

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

别吹 你不一定会define 的相关文章

  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • VirtualHost 在 Ubuntu 14.04 上始终返回 Apache 的默认主机

    我尝试设置默认虚拟主机之外的虚拟主机localhost 每当我尝试呼叫我的虚拟主机时http test我得到了位于目录中的默认 Apache2 索引文件http localhost 此外 apache 在禁用后仍然返回此页面 a2dissi
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个

随机推荐

  • Python中使用xpath获取select option的每一行的text和value

    原数据内容如下
  • 设计模式--适配器模式

    适配器模式属于结构型模式 基本原理 根据不同的需求 使用一个适配器去寻找应对的方法 主要流程 1 创建解决方法的类 2 创建一个适配器 根据不同需求对应相应的解决方法 3 使用一个类去分配适配器 注意 适配器不是在详细设计时添加的 而是解决
  • C语言本身是用什么语言写的?

    先说结论 C语言由B语言编写 B语言是由A语言编写 A B C 好了 不开玩笑了 既然你能提出这个级别的问题 说明你应该学过C 既然你能提出这个级别的问题 说明你没学过编译原理 或者全还给老师了 容我不厚道一下下 你所谓的 C语言 准确来说
  • 基于 Flink CDC 高效构建入湖通道

    本文整理自阿里云 Flink 数据通道负责人 Flink CDC 开源社区负责人 Apache Flink PMC Member Committer 徐榜江 雪尽 在 Streaming Lakehouse Meetup 的分享 内容主要分
  • 免费虚拟局域网(VLAN)组建教程

    虚拟局域网 VLAN 是一组逻辑上的设备和用户 这些设备和用户并不受物理位置的限制 可以根据功能 部门及应用等因素将它们组织起来 相互之间的通信就好像它们在同一个网段中一样 由此得名虚拟局域网 虚拟局域网在日常的工作生活中 起着非常大的作用
  • superset的docker安装配置和汉化

    1 docker拉去superset镜像 docker pull amancevice superset 2 启动容器 1 启动容器 docker run d p 8188 8088 name superset v opt docker s
  • 【Latex排版】使用Latex 排版过程中的那些一二三问题汇总

    排版错误问题总结 1 在 maketitle 位置处报错 Missing inserted 2 添加参考文献 编译后显示错误 并且pdf中引用文献处为问号 持续更新问题 近期用Latex整理期刊论文时遇到了不少问题 现把遇到的问题及最终解决
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • React 深度学习:Fiber-ReactFiberLazyComponent

    ReactLazyComponent 包 packages shared ReactLazyComponent js Copyright c Facebook Inc and its affiliates This source code
  • 深入理解线程与并发

    文章目录 计算机硬件与并发 线程与Thread类 线程的特点 线程的优先级 线程控制 总结 个人主页 程序员 小侯 CSDN新晋作者 欢迎 点赞 评论 收藏 收录专栏 Java知识介绍 适用于 Java初学者 希望作者的文章能对你有所帮助
  • go 语言学习笔记 0001 --> iota

    go语言中预置了一个预定义常量 iota 这个东西有个很奇怪的特性 会根据 const 关键字改变值 默认的 iota在const出现的时候会初始化为0 而后不断递加1 直到出现第二个const关键字 const countagn1 2 l
  • java持久层框架mybatis如何防止sql注入

    sql注入大家都不陌生 是一种常见的攻击方式 攻击者在界面的表单信息或url上输入一些奇怪的sql片段 例如 or 1 1 这样的语句 有可能入侵参数校验不足的应用程序 所以在我们的应用中需要做一些工作 来防备这样的攻击方式 在一些安全性很
  • Ubuntu18.04+Docker+Hadoop+Spark分布式集群搭建

    题前记 因为课程需求 下面将搭建过程用学术论文的格式写 其实我并不想写的 没办法 学习作业嘛QAQ 我的联系方式 630056108 文章目录 Docker上的Hadoop大数据平台搭建与测试 1 简介与原理 1 1 Docker介绍 1
  • 电脑安装双系统

    1 准备工具 我们需要安装两个系统 win10和deepin 准备2个u盘 1个u盘使用优启通制作pe 支持uefi启动 1个u盘使用deepin官网上的启动盘制作工具制作启动盘 2 基础知识 2 1 磁盘格式 磁盘格式分为mbr和guid
  • c++: websocket 客户端与服务端之间的连接交互

    目录 socket 头文件 延迟时间 通信协议地址 TCP IP 服务端 客户端 编程步骤 服务端 客户端 编程步骤 1 初始化 WSAStartup 2 创建 socket 2 1 协议族 2 2 socket 类型 2 3 协议 3 绑
  • MS5611气压计 I2C驱动代码 STM32

    文章目录 前言 通信接口 IIC 一 MS5611的5种命令 RESET 重启芯片 READ PROM D1 D2 CONVERSION READ ADC RESULT 二 实现代码 1 初始化 2 读取数据 3 补偿温度数据 前言 这篇博
  • vue3 mitt 替换EventBus

    mitt 在vue3中 on off和 once实例方法已经被移除 我们熟悉的EventBus无法使用 对于这用情况我们使用Mitt库 和EventBus大同小异 1 npm install mitt S 2 mian js ts 初始化
  • C++解决报错无法打开源文件“json/json.h“

    C 解决报错无法打开源文件 json json h 报错详情 解决步骤 1 安装vcpkg 2 安装报错的依赖包 3 在VisualStudio中添加刚才生成的目录 报错详情 解决步骤 1 安装vcpkg https vcpkg io en
  • 【OJ比赛日历】快周末了,不来一场比赛吗? #01.07-01.13 #12场

    CompHub 实时聚合多平台的数据类 Kaggle 天池 和OJ类 Leetcode 牛客 比赛 本账号同时会推送最新的比赛消息 欢迎关注 更多比赛信息见 CompHub主页 或 点击文末阅读原文 以下信息仅供参考 以比赛官网为准 目录
  • 别吹 你不一定会define

    目录 1 define的介绍 1 1 概念 1 2 补充说明 1 3 C语言预处理的三个内容 2 define的使用 2 1 define用于防止头文件重复包含 2 2 define 的定义与撤销 2 2 1 定义 2 2 2 撤销 2 3