【C语言】宏定义

2023-11-14

目录

一、宏定义

二、宏定义作用域

三、带参数的宏定义

四、宏定义中的#与##

1、#:

2、##:

五、可变参数宏定义


一、宏定义

宏定义通俗就是一种替换操作,以#define在文件开头定义;如:

#define NUM 1234

#define STR  “abcd”

通过此定义后,在本文件中NUM会替换掉1234;STR替换掉字符串abcd;注意宏定义后不加分号。宏定义允许嵌套,一个宏定义里可以有其他宏定义,如:

#define NUM_N  NUM+1234

其中NUM为上文定义的NUM。

二、宏定义作用域

宏定义的作用域从 #define 定义处开始到 #undef 处结束;如:

#define NUM 1234

……

……

#undef NUM 1234

#undef 可以不要,那么作用域就是从定义处开始到文件结束。

三、带参数的宏定义

以上的宏定义只是简单的替换,不带有参数。带参数的宏定义如下:

#define ADD(x,y)  ((x)+(y))

以上定义就是计算x+y的值;使用该宏定义时形式如下:

ADD(3,4);

四、宏定义中的#与##

1、#:

在带参数的宏定义中,#运算符后面应该跟一个参数,预处理会把这个参数转换为一个字符串。

例:

2、##:

##运算符被称为记号连接运算符,可以使用##运算符连接两个参数;连接的两个参数需为整型数据。

例:

五、可变参数宏定义

函数支持可变参数,带参数的宏定义也可使用可变参数;例如:

#define SHOWOUT(…)  printf(# __VA_ARGS__)

其中…表示使用可变参数,__VA_ARGS__在预处理中被实际的参数所替换,注意__VA_ARGS__前后是两个下划线。

例:

可变参数可以为空参数,定义为:

#define SHOWOUT(x,…)  printf(#x,## __VA_ARGS__)

先将x转换为字符串,再与后面的参数连接。

例:

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

【C语言】宏定义 的相关文章

  • C++11-14 第6讲 explicit关键字

    explicit 用来针对构造函数有多个实参 include
  • 利用python进行数据分析——pandas

    import pandas as pd import numpy as np np random seed 12345 import matplotlib pyplot as plt 1 介绍Pandas 工具一 Series obj pd
  • 总结一下多益网络数据研发校招面试

    1 自我介绍 2 说一下你觉得最好的项目 3 数据仓库分层 4 说一下主键和唯一索引 5 说一下hive的group by 怎么在mapreduce执行的 6 说一下hashmap和map区别 7 说一下数据预处理 8 说一下MR原理 9
  • 少儿编程要先学会电脑和英语

    格物斯坦小坦克想说的是少儿编程和计算机代码编程是不一样的 很多人对孩子学习的Scratch语言和成人学习的Java C语言等区分不开 因而习惯性的抗拒说 我的孩子以后可能不会成为一个程序员 学习之前是不是先要懂英语和电脑 实际上少儿电脑编程

随机推荐

  • 如何编写有多个返回值的C语言函数

    1引言 笔者从事C语言教学多年 在教学中学生们常常会问到如何编写具有多个返回值的C语言函数 编写有多个返回值的函数是所有C语言教材里均没有提到的知识点 但在实际教学与应用的过程中我们都有可能会遇到这样的问题 有学生也尝试了不少方法 如把多个
  • B - Equations

    B Equations Consider equations having the following form ax12 b x22 cx32 d x42 0 a b c d are integers from the interval
  • 使用Idea创建一个JavaWeb的SSM(maven)项目~(史上最详细,傻瓜式教学,跟着我的做,不会你找我)

    今天讲的是如何用idea创建一个JavaWeb的Maven SSM项目并且实现简单的登陆功能 项目源码在最后 需要的可以自行下载 本文章过于详细过于面向小白 并且在讲解SSM项目的搭建过程中涉及到了小白们极有可能遇到的Idea的坑 文章比较
  • Keystone 高可靠性部署与性能测试

    Goal Keystone Region 为跨地域的 Openstack 集群提供了统一的认证和用户租户管理 目前公司在国内外部署了数十套 Openstack 集群 其中既有集群在内网 又有集群在公网 既有 Havana 集群 也有 Ice
  • Thumb和ARM指令不能切换问题(error:unsupported interworking call (Thumb -> ARM))

    1 报错现象 xxx ko ection 3 reloc 4 sym xxxxxx unsupported interworking call Thumb gt ARM 2 报错原因和分析 报错信息的翻译 程序不支持代码交织 thumb态切
  • Spring入门简介

    Spring框架是Java平台上最流行的企业应用程序开发框架之一 它是一个轻量级的开源框架 被设计为简化企业级应用程序的开发 Spring的核心目的是为了解决企业应用程序的开发问题 包括代码的耦合 事务管理 异常处理 数据访问 安全性 We
  • fatal error C1083: 无法打开预编译头文件:“Debug\opencv.pch”: No such file or directory

    步骤 方法右键点击你创建的项目 选择 属性标签 点击属性 弹出 项目属性页 在左侧找到以下位置 配置属性 gt C C gt 预编译头 并选择它 在右边的菜单中选择 创建 使用预编译头 中的 不使用预编译头文件 点击 确定 按钮退出即可原因
  • Transformer 架构和 BERT、GPT 和 T5 的兴起:初学者指南

    在广阔且不断发展的人工智能 AI 领域 有些创新不仅会留下深刻的印象 而且会带来巨大的影响 他们重新定义了整个领域的轨迹 在这些突破性的创新中 Transformer 架构成为变革的灯塔 这类似于工业革命期间蒸汽机的发明 推动人工智能进入一
  • 深入理解Unity5中的StandardShader屏幕像素化特效的实现

    概要 续接上文 本文进一步讲解与分析了上文未讲完的Unity5中Standard Shader正向基础渲染通道源码的片段着色实现部分 以及对屏幕像素化后期特效进行了实现 同样需要声明的是 本文中对Stardard Shader源码的一些分析
  • NTP时间服务器安装与配置

    第1章 Server端的安装与配置 1 1查看系统是否已经安装ntp服务组件 rpm qa grep ntp 查看是否已经安装ntp组件 有如下两个组件说明已经安装 ntpdate 4 2 6p5 1 el6 centos x86 64 n
  • Spark的RDD原理以及2.0特性的介绍

    注 本文由王联辉在高可用架构群分享 本文转载自高可用架构 ArchNotes 王联辉 曾在腾讯 Intel 等公司从事大数据相关的工作 2013 年 2016 年先后负责腾讯 Yarn 集群和 Spark 平台的运营与研发 曾负责 Inte
  • 微信小程序计算三角形面积,三棱锥体积

    微信小程序计算三角形面积 三棱锥体积 index wxml
  • oracle 12c 支持列表,ORACLE 12C 依然支持 bbed

    ORACLE 12C的测试版出来了 对于习惯了使用bbed ORACLE 手术刀 的人来说 12C是否继续被支持是一个很让人关注的问题 通过本实验测试 12C继续支持bbed 很多艰难的数据库恢复依然可以通过bbed来实现 也从侧面说明 O
  • Activiti7与Spring、Spring Boot整合开发

    Activiti整合Spring 一 Activiti与Spring整合开发 1 1 Activiti与Spring整合的配置 1 在pom xml文件引入坐标 如下
  • 毕业设计-深度学习身份证号码检测识别-python-opencv

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • 使用CSS设置placeholder的样式

  • 服务器环境-安装基础环境

    虚拟机CentOS系统安装 VmWare安装Linux镜像 CentOS 最小镜像 虚拟机IP修改 安装开发常用环境 宝塔面板 宝塔命令 全部yes yum install y wget wget O install sh http dow
  • E-R图和关系模型怎么写?

    2023年6月3日 周六下午 前几天 刚刚写完数据库E R图和关系模型的作业 在B站找到了不少讲得不错的教学视频 E R图 快速学会软件工程和数据库课程中的ER图画法 https www bilibili com video BV19A41
  • 练什么有利于防身

    短跑 拳击
  • 【C语言】宏定义

    目录 一 宏定义 二 宏定义作用域 三 带参数的宏定义 四 宏定义中的 与 1 2 五 可变参数宏定义 一 宏定义 宏定义通俗就是一种替换操作 以 define在文件开头定义 如 define NUM 1234 define STR abc