第十二章:预处理命令

文章目录

  • 第十二章:预处理命令
      • 宏定义
        • 无参宏定义
        • 带参数的宏定义
      • 文件包含处理

第十二章:预处理命令

在这里插入图片描述

  • 作用:由编译预处理程序对程序中的特殊命令作出解释,以产生新的源程序对其进行正式编译

  • C语言与其他语言的重要区别就是可以使用预处理命令和具有预处理的功能

  • C提供的预处理功能主要有以下三种:

    • 宏定义

      #define A 30  //预处理时所有A以30替换
      
    • 文件包含

      #include <stdio.h>  //预处理时以stdio.h中的实际内容替换
      
    • 条件编译

  • 所有编译预处理都以#开头,单独占源程序的一行,一般放在源程序首部,预处理命令不是C语句,行末不加分号(😉

宏定义

  • 作用:用标识符来代表一串字符,编译系统在编译之前会将标识符换成字符串
  • 宏定义包括两种:无参宏定义、有参宏定义
无参宏定义
  • 定义:指用一个指定的标识符来代表一个字符串

  • 一般形式:

    #define  标识符  字符串#define PI 3.14159  
    #define:宏定义命令
    PI:宏名
    
  • 宏展开:在预处理时将宏名替换成字符串的过程成为宏展开

  • 说明

    • 宏明习惯用于大写字母
    • 宏定义不在末尾加分号
    • 作用范围为定义之后到本源文件结束
    • 用#undef终止宏定义的作用域,称为取消宏命令定义。定义格式:#undef 标识符
    • 对程序中用双引号括起来的字符串内的字符,即使与宏名相同,也不进行置换
    • 宏定义不同于变量,只做字符替换,不分配内存空间
带参数的宏定义
  • 作用:不仅进行简单的字符串替换,还要进行参数替换

  • 一般形式

    #define 宏名(形参表) 字符串#define S(a,b) a*b
    
  • 带参宏定义的展开:按#define命令行中指定字符串从左到右进行置换。若串中包含形参,将程序中相应的实参代替形参,非参数字符保留

  • 说明:

    • 宏定义时,宏名与带参数的括号间不应加空格,否则将空格以后的字符都作为替代字符串的一部分。
      在这里插入图片描述

文件包含处理

  • 定义:文件包含指将另外的文件包含到本文件之中,即一个源文件中可包含另外一个源文件的全部内容

  • 一般形式

    #include<文件名>或#include“文件名”
    
  • 作用:使用文件包含可避免重复劳动,往往将常用的符号常量定义、函数原型声明、类型定义等组成一个文件,用 #include 命令将它添加到自己的源文件中

  • 头文件内容可包括:函数原型定义、宏定义、全局变量定义、结构体类型定义等

  • 一个include命令只能指定一个被包含文件

  • 用<>、" "的区别:

    • < >: 标准方式,系统直接按照标准目录搜索,这个标准目录由编译程序的用户定义
    • “ ”:系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找
    • 一般:调用库函数时用<>;调用自写函数时用" "

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

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

相关文章

【WEEK5】 【DAY4】数据库操作【中文版】

2024.3.28 Thursday 目录 2.数据库操作2.1.数据库2.1.1.新建数据库&#xff08;右键的方法&#xff09;2.1.2.查询&#xff1a;点击“查询”->“新建查询表”即可输入所需要的语句&#xff0c;点击“运行”&#xff0c;如&#xff1a; 2.2.结构化查询语句分类2.3.数据库操作…

Servlet中的request和respons对象

当我们在地址栏中输入一长串的地址的时候进行访问的时候&#xff0c;服务器&#xff08;Tomcat&#xff09;会给我们生成衣个request对象和reponse. requset对象&#xff1a; 1.获取用户输入的信息进行登录验证 Java给我们提供的是HttpServletRequset接口&#xff0c;并没有…

QT_day3:信号和槽的连接方式

1、使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是…

SpringBoot:自定义线程池配置类

文章目录 一、前言二、案例展示1、初始版本2、代码审核意见和优化建议3、潜在问题和风险4、优化建议5、优化后的代码 三、具体使用 一、前言 有时候我们在项目中做一些长链路的跑批任务时&#xff0c;基于Springboot项目的定时任务&#xff0c;我们可以指定一个自定义的线程配…

基于SpringBoot民族婚纱预定系统

采用技术 基于SpringBoot民族婚纱预定系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 系统功能 摄影师列表 公告信息管理 公告类型管理 项目背景…

Redis慢日志

SLOWLOG 是用来读取和重置 Redis 慢查询日志的命令&#xff0c;Redis 2.2.12 版本开始支持 1.Redis 慢查询日志概述 客户端从发送命令到获取返回结果经过了以下几个步骤&#xff1a; 1. 客户端发送命令 2. 该命令进入 Redis 队列排队等待执行 3. Redis 开始执行命令 - Red…

ToolPlatform:烧录时TFTP报错

截图 文字 ARP Retry count exceeded; starting again 网络下载TFTP超时&#xff0c;可能的原因如下&#xff1a; 1.首先检查服务器IP是否正确&#xff0c;若不正确点击重新加载&#xff0c;加载最新的PC端IP地址&#xff1b; 2.检查子网掩码与网关是否配置正确; 3.检查板端IP…

探索Python中的强化学习:Q-learning

强化学习是一种机器学习方法&#xff0c;用于训练智能体&#xff08;agent&#xff09;在与环境的交互中学习如何做出最优决策。Q-learning是强化学习中的一种基于价值函数的方法&#xff0c;用于学习最优策略。本文将详细介绍Q-learning的原理、实现方式以及如何在Python中应用…

K8S安装和部署(kubeadmin安装1主2从)

这里用kubeadmin方式进行安装部署 1. 准备三台服务器 服务器地址 节点名称 192.168.190.200 master 主 192.168.190.201 node1 从 192.168.190.202 node2 从 2. 主机初始化&#xff08;所有主机&#xff09; 2.1根据规划设置主机名 #切换到192.168.190.200 hostnamectl…

QA:绑定ROS机器人控制板PCB设备ID

前言 一般情况下&#xff0c;主控板(树莓派、Jetson等)会同时和多个串口进行通信&#xff0c;这时&#xff0c;我们希望&#xff0c;用一个固定名称代表特定串口&#xff0c;比如用serial_motor_drive绑定电机驱动控制板&#xff0c;使ROS2的配置、编程和运行更加方便。 下面是…

会声会影剪刀为什么灰色 会声会影分割素材的方法 会声会影视频制作教程 会声会影2023旗舰版下载 会声会影快捷键

会声会影是一款操作简单&#xff0c;功能齐全&#xff0c;适合新手使用的视频剪辑软件。在使用会声会影剪辑的过程中&#xff0c;我们一般需要使用【剪刀工具】&#xff0c;但有时会声会影剪刀是灰色无法使用的状态&#xff0c;这个时候该怎么办呢&#xff1f;本文将为大家介绍…