C语言-预处理指令-#ifdef xx #endif-用于检查宏是否被定义

2024-03-14 05:52

本文主要是介绍C语言-预处理指令-#ifdef xx #endif-用于检查宏是否被定义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 问题一:请你描述#ifdef XX #ifdef 语法和 #ifndef XX #endif 语法?(区别:n)
      • ifdef 基本语法:
      • ifndef基本语法:
    • 问题二:阅读下面代码,看逻辑
      • 问题二输出:
    • 问题三:和问题二的区别
      • 问题三输出:
    • 道友:年轻人最容易丢掉的两个最重要的品质:求知的欲望与灵魂世界的丰盈;处理亲密关系的能力。前者可能决定了你的上限,而后者决定你的下限。

问题一:请你描述#ifdef XX #ifdef 语法和 #ifndef XX #endif 语法?(区别:n)

  • 当使用 #ifdef XX 时,它会检查是否定义了宏 XX。如果宏 XX 已经被定义,则下面的代码块会被编译,否则该代码块会被忽略。
  • 而当使用 #ifndef XX 时,它会检查是否未定义了宏 XX。如果宏 XX 没有被定义,则下面的代码块会被编译,否则该代码块会被忽略。
  • 在这两种情况下,#endif 用于标记条件编译的结束。只有当满足条件时,#ifdef XX#ifndef XX 之间的代码才会被编译。

ifdef 基本语法:

#ifdef XX// 如果宏 XX 已定义,则编译此处的代码
#else// 如果宏 XX 未定义,则编译此处的代码
#endif

ifndef基本语法:

#ifndef XX// 如果宏 XX 未定义,则编译此处的代码
#else// 如果宏 XX 已定义,则编译此处的代码
#endif

问题二:阅读下面代码,看逻辑

#include <stdio.h>
#define DEBUG
int main() {#ifdef DEBUG  //如果未定义DEBUG,则不执行下面的printf,//只是前面已经有定义DEBUG,所以下面执行printfprintf("Debug mode is enabled.\n");//(√)#endif#ifndef TEST  //因为前面没有定义TEST,//所以再执行下面的“TEST is not defined”printf("TEST is not defined.\n"); //(√)#elseprintf("TEST is defined.\n");//(×)#endifreturn 0;
}

问题二输出:

Debug mode is enabled.
TEST is not defined.

问题三:和问题二的区别

#ifndef TEST    //因为前面TEST未定义,所以执行下一句:定义TEST#define TEST
#endif
#include <stdio.h>#define DEBUG#ifndef TEST    //如果前面TEST未定义,则在此处定义它#define TEST
#endifint main() {#ifdef DEBUG  //这里关注 #ifndefprintf("Debug mode is enabled.\n");#endif#ifndef TEST    //因为前面定义了,所以此处执行#else,输出“TEST is defined”printf("TEST is not defined.\n");#elseprintf("TEST is defined.\n");#endifreturn 0;
}

问题三输出:

Debug mode is enabled.
TEST is defined.

道友:年轻人最容易丢掉的两个最重要的品质:求知的欲望与灵魂世界的丰盈;处理亲密关系的能力。前者可能决定了你的上限,而后者决定你的下限。

这篇关于C语言-预处理指令-#ifdef xx #endif-用于检查宏是否被定义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807398

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal