#if等命令的学习

预处理命令

#include(文件包含命令)

#define(宏定义命令)

#undef #if(条件编译)

#ifdef

#ifndef

#elif

#endif defined函数(与if等结合使用)

下面将解释上述各自的用法、使用场景以及不同之处

C语言中的预处理命令在程序编译前进行处理,它们主要用于控制编译过程和代码的条件性包含。以下是各个命令的解释及其使用场景:

1. #include(文件包含命令)

用法: #include <文件名>#include "文件名"

  • 功能: 将指定的文件包含到当前文件中,通常用于包含头文件(如标准库或自定义头文件)。
  • 使用场景:
    • #include <...> 用于包含标准库或编译器已知的头文件(搜索路径不包括当前目录)。
    • #include "..." 用于包含自定义文件,编译器首先在当前目录查找文件。

例子:

#include <stdio.h> // 包含标准输入输出库

#include "myheader.h" // 包含自定义头文件

2. #define(宏定义命令)

用法: #define 宏名 宏内容

  • 功能: 定义一个宏,可以是常量或简单的代码片段(如函数的替代)。
  • 使用场景:
    • 定义常量来替代硬编码的值,使代码更易读。
    • 定义简单的宏函数进行重复代码的替代。

例子:

#define PI 3.14159 // 定义常量PI 
#define MAX(a, b) ((a) > (b) ? (a) : (b)) // 宏函数,返回较大值 

3. #undef(取消宏定义)

用法: #undef 宏名

  • 功能: 取消一个已定义的宏。
  • 使用场景: 用于防止同名的宏在其他地方被定义,或在需要重新定义宏时。

例子:

#undef PI // 取消之前定义的PI宏 
#define PI 3.14 // 重新定义PI 

4. #if(条件编译)

用法: #if 表达式

  • 功能: 根据表达式的计算结果(非零为真,零为假)决定是否编译其中的代码块。
  • 使用场景: 用于根据编译环境、平台或编译选项的不同进行条件性代码编译。

例子:

#if VERSION >= 2 printf("版本2或更高\n"); 
#endif 

5. #ifdef(条件编译)

用法: #ifdef 宏名

  • 功能: 当宏名已被定义时,编译该代码块。
  • 使用场景: 用于判断一个宏是否已被定义,通常用于防止重复包含头文件或根据宏定义决定编译不同的代码。

例子:

#ifdef DEBUG printf("调试模式\n"); 
#endif 

6. #ifndef(条件编译)

用法: #ifndef 宏名

  • 功能: 当宏名未被定义时,编译该代码块。
  • 使用场景: 与 #ifdef 相反,用于当宏未定义时编译代码,常用于头文件的多重包含保护。

例子:

#ifndef MY_HEADER_H 
#define MY_HEADER_H // 头文件内容 
#endif 

7. #elif(条件编译)

用法: #elif 表达式

  • 功能: 类似于 else if,在多个条件中进行选择。
  • 使用场景: 用于多条件分支的编译选择,与 #if#else#endif 结合使用。

例子:

#if VERSION == 1 printf("版本1\n"); 
#elif VERSION == 2 printf("版本2\n"); 
#else printf("其他版本\n"); 
#endif 

8. #endif(结束条件编译)

用法: #endif

  • 功能: 结束 #if#ifdef#ifndef 的条件编译块。
  • 使用场景: 用于结束条件编译结构。

例子:

#if VERSION >= 2 printf("版本2或更高\n"); 
#endif // 结束条件编译 

9. defined 函数(与 #if 结合使用)

用法: defined(宏名)

  • 功能: 判断某个宏是否已定义,通常与 #if 结合使用。
  • 使用场景: 用于条件性编译时的宏定义检测。

例子:

#if defined(DEBUG) printf("调试模式已启用\n"); 
#endif 

总结:

  • #include 用于包含头文件;
  • #define#undef 用于定义和取消宏;
  • #if#ifdef#ifndef#elif#endif 用于条件编译;
  • defined 函数用于判断某个宏是否定义。

这些预处理命令为程序提供了灵活的编译控制,使得代码能够适应不同的环境和配置。

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

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

相关文章

黑神话悟空mac可以玩吗

黑神话悟空mac上能不能玩对于苹果玩家来说很重要&#xff0c;那么黑神话悟空mac可以玩吗&#xff1f;目前是玩不了了&#xff0c;没有针对ios系统的版本&#xff0c;只能之后在云平台上找找了&#xff0c;大家可以再观望下看看。 黑神话悟空mac可以玩吗 ‌使用CrossOver‌&…

【海康威视面经】

海康威视面经 Java基础java常用集合 及其优缺点ArrayListVectorLinkedList Jvm调优监控发现问题工具分析问题 &#xff1a;性能调优GC频繁 出现内存泄漏 内存溢出CPU飙升 Synchronized和Volatile的比较反射线程池和new thread利弊高并发 集群 分布式 负载均衡 MySQL调优基础优化…

neo4j安装启动教程+对应的jdk配置

参考这位博主的视频教程&#xff1a;neo4j社区windows版下载 一、官网下载neo4j的安装包 &#xff08;1&#xff09;官网下载页面 &#xff08;2&#xff09;上一步 【download】之后&#xff0c;会自动下载&#xff0c;如果没有&#xff0c;点击【here】 这里可以看到一行字…

Gradio 自定义组件

如何使用 Gradio 自定义组件&#xff0c;Gradio 前端使用 Svelte&#xff0c;后端使用的 Python。如何自定义一个组件呢&#xff1f;Gadio 提供了类似于脚手架的命令&#xff0c;可以生成需要开发组件的前后和后端代码。 创建组件 运行如下命令&#xff0c;gradio 会自动生成…

[2025]基于微信小程序慢性呼吸系统疾病的健康管理(源码+文档+解答)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

开放标准如何破解企业数字化与可持续发展的困境:The Open Group引领生态系统架构创新

应对数字化与可持续发展的双重挑战&#xff0c;开放标准是关键 在当今快速变化的商业环境中&#xff0c;企业不仅需要通过数字化转型提升竞争力&#xff0c;还面临日益严格的可持续发展要求。开放标准正在成为企业破解这一双重挑战的核心工具。The Open Group 2024生态系统架构…

【MySQL】了解并操作MySQL的缓存配置与信息

目录 一、查看缓存配置 二、查看缓存信息 查询MySQL的缓存相关信息&#xff0c;一般我们用两个命令&#xff1a; show variables like %query_cache%; show status like %qcache%; 一、查看缓存配置 查看缓存配置的相关的系统变量变量&#xff0c;返回给我们服务器缓存的配置…

【SQL】百题计划:SQL内置函数“LENGTH“的使用

【SQL】百题计划-20240912 方法一&#xff1a; Select tweet_id from Tweets where LENGTH(content) > 15;– 方法二&#xff1a; Select tweet_id from Tweets where CHAR_LENGTH(content)> 15;

WordPress建站钩子函数及使用

目录 前言&#xff1a; 使用场景&#xff1a; 一、常用的wordpress钩子&#xff08;动作钩子、过滤器钩子&#xff09; 1、动作钩子&#xff08;Action Hooks&#xff09; 2、过滤器钩子&#xff08;Filter Hooks&#xff09; 二、常用钩子示例 1、添加自定义 CSS 和 JS…

HTB-Vaccine(suid提权、sqlmap、john2zip)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天来为大家讲解Vaccine靶机 渗透过程 信息搜集 服务器开放了 21FTP服务、22SSH服务、80HTTP服务 通过匿名登录FTP服务器 通过匿名登录到服务器&#xff0c;发现backup.zip文件&#xff0c;可能存在账号密码 发现b…

硬件工程师笔试面试——滤波器

目录 12、滤波器 12.1 基础 滤波器原理图 滤波器实物图 12.1.1 概念 12.1.2 滤波器的分类 12.1.3 滤波器的工作原理 12.1.4 滤波器的应用 12.1.5 滤波器设计的关键参数 12.2 相关问题 12.2.1 不同类型的滤波器在实际应用中的具体作用是什么? 12.2.2 如何设计一个简…

ABAP-Logger ABAP 日志记录与任何其他语言一样轻松

ABAP-Logger ABAP 日志记录与任何其他语言一样轻松 ABAP Logger SAP Logging as painless as any other language. ABAP Version: 702 or higher See the mission statement Features Record message in Application Log(BC-SRV-BAL)Display message Installation Insta…

记忆化搜索

目录 引言&#xff1a; 1. 什么是记忆化搜索&#xff1f; 2. 如何实现记忆化搜索&#xff1f; 一、斐波那契数 1. 题目链接&#xff1a;509. 斐波那契数 2. 题目描述&#xff1a; 3. 解法&#xff08;暴搜 -> 记忆化搜索 -> 动态规划&#xff09;&#xff1a; &am…

【楚怡杯】职业院校技能大赛 “云计算应用” 赛项样题六

某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenStack搭建企业内部私有云平台&#xff0c;开源Kubernetes搭建云原生服务平台&#xff0c;选…

涛思数据库安装和卸载

安装 cd opt/taos/TDengine-server-2.4.0.5 sudo ./install.sh 启动taos​ 安装后&#xff0c;请使用 systemctl 命令来启动 TDengine 的服务进程 systemctl start taosd检查服务是否正常工作&#xff1a; systemctl status taosd 升级 3.0 版在之前版本的基础上&#x…

使用 SpringBoot 基础web开发的支持

首先导入项目相关的依赖&#xff1a; pom.xml 文件&#xff1a; 导入相关项目依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-in…

Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)

把学习过程中遇到的Git问题汇总如下&#xff08;后续学习遇到问题会及时更新此专栏&#xff09;&#xff1a; Git原理及常用命令小结——实用版&#xff08;ing......&#xff09;、Git设置用户名邮箱-CSDN博客 解决git每次push代码到github都需要输入用户名以及密码-CSDN博客…

硬件工程师笔试面试——变压器

目录 9、变压器 9.1 基础 变压器原理图 变压器实物图 9.1.1 概念 9.1.2 变压器组成结构 9.1.3 变压器原理 9.1.4 变压器的类型 9.1.5 应用领域 9.2 相关问题 9.2.1 变压器的工作原理是什么? 9.2.2 如何选择合适的变压器类型? 9.2.3 变压器在实际应用中,如何进行…

9.18 C++对C的扩充

使用cout实现输出斐波那契前20项的值 #include <iostream>using namespace std;int main() {int n11,n21,n3;cout << n1 <<" "<< n2<<" ";for(int i0;i<18;i){n3n1n2;cout<<n3<<" " ;n1n2;n2n3;}…

算法备案究竟是自己做还是找专业机构?

算法备案究竟是自己做还是找专业机构&#xff1f; 在深入了解算法备案申报要求和规则的基础上&#xff0c;企业可以选择自行完成备案。然而&#xff0c;如果缺乏相关知识和经验&#xff0c;申报材料可能会反复出错&#xff0c;导致被驳回&#xff0c;增加试错的时间成本&#x…