C语言之详解#ifdef等宏

NXP(imx8qxp)系列DDR校准以及android镜像烧录 文章目录一、 不得不吐槽以下nxp的这个代码镜像烧写的过程,做得太开源了,导致镜像根本烧录不进去,实属令人头痛。 一、 阅读详情

这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指 定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。
    条件编译命令最常见的形式为:
    #ifdef 标识符
    程序段1
    #else
    程序段2
    #endif
    
    它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。
    其中#else部分也可以没有,即:
    #ifdef
    程序段1
    #denif
    
    这里的“程序段”可以是语句组,也可以是命令行。这种条件编译可以提高C源程序的通用性。如果一个C源程序在不同计算机系统上系统上运行,而不同的计算机 又有一定的差异。例如,我们有一个数据类型,在Windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这样往往需要对源 程序作必要的修改,这就降低了程序的通用性。可以用以下的条件编译:
    #ifdef WINDOWS
    #define MYTYPE long
    #else
    #define MYTYPE float
    #endif
    
    如果在Windows上编译程序,则可以在程序的开始加上
    #define WINDOWS
    
    这样则编译下面的命令行:
    #define MYTYPE long
    
    如果在这组条件编译命令之前曾出现以下命令行:
    #define WINDOWS 0
    
    则预编译后程序中的MYTYPE都用float代替。这样,源程序可以不必作任何修改就可以用于不同类型的计算机系统。当然以上介绍的只是一种简单的情况,可以根据此思路设计出其它的条件编译。
    例如,在调试程序时,常常希望输出一些所需的信息,而在调试完成后不再输出这些信息。可以在源程序中插入以下的条件编译段:
    #ifdef DEBUG
    print ("device_open(%p)/n", file);
    #endif
    
    如果在它的前面有以下命令行:
    #define DEBUG
    
    则在程序运行时输出file指针的值,以便调试分析。调试完成后只需将这个define命令行删除即可。有人可能觉得不用条件编译也可达此目的,即在调试 时加一批printf语句,调试后一一将printf语句删除去。的确,这是可以的。但是,当调试时加的printf语句比较多时,修改的工作量是很大 的。用条件编译,则不必一一删改printf语句,只需删除前面的一条“#define DEBUG”命令即可,这时所有的用DEBUG作标识符的条件编译段都使其中的printf语句不起作用,即起统一控制的作用,如同一个“开关”一样。
    有时也采用下面的形式:
    #ifndef 标识符
    程序段1
    #else
    程序段2
    #endif
    
    只是第一行与第一种形式不同:将“ifdef”改为“ifndef”。它的作用是:若标识符未被定义则编译程序段1,否则编译程序段2。这种形式与第一种形式的作用相反。
    以上两种形式用法差不多,根据需要任选一种,视方便而定。
    还有一种形式,就是#if后面的是一个表达式,而不是一个简单的标识符:
    #if 表达式
    程序段1
    #else
    程序段2
    #endif
    
    它的作用是:当指定的表达式值为真(非零)时就编译程序段1,否则编译程序段2。可以事先给定一定条件,使程序在不同的条件下执行不同的功能。
    例如:输入一行字母字符,根据需要设置条件编译,使之能将字母全改为大写输出,或全改为小写字母输出。
    #define LETTER 1
    main()
    {
    char str[20]="C Language",c;
    int i=0;
    while((c=str[i])!='/0'){
    i++;
    #if LETTER
    if(c>='a'&&c<='z') c=c-32;
    #else
    if(c>='A'&&c<='Z') c=c+32;
    #endif
    printf("%c",c);
    }
    }
    
    运行结果为:C LANGUAGE
    现在先定义LETTER为1,这样在预处理条件编译命令时,由于LETTER为真(非零),则对第一个if语句进行编译,运行时使小写字母变大写。如果将程序第一行改为:
    #define LETTER 0
    
    则在预处理时,对第二个if语句进行编译处理,使大写字母变成小写字母(大写字母与相应的小写字母的ASCII代码差32)。此时运行情况为:
    c language
    有人会问:不用条件编译命令而直接用if语句也能达到要求,用条件编译命令有什么好处呢?的确,此问题完全可以不用条件编译处理,但那样做目标程序长(因 为所有语句都编译),而采用条件编译,可以减少被编译的语句,从而减少目标的长度。当条件编译段比较多时,目标程序长度可以大大减少。

STM32F103RCT6的FLASH读写操作 STM32F103RCT6是一款常用的32位微控制器,它具有内置的FLASH存储器,可以用于存储程序代码和数据。在本文中,我们将详细介绍如何进行STM32F103RCT6的FLASH读写操作,并提供相应的源代码。写入数据时,我们通过将数据直接写入FLASH地址来完成。通过使用适当的API和规则,我们可以有效地读取和写入数据。写入FLASH时,我们需要按特定的规则进行编程。首先,我们需要包含适当的头文件和定义相关的和变量,以便在代码中使用FLASH API。类型的指针,我们可以直接读取FLASH中的数据。 阅读详情

相关推荐

leaflet 综合教程170+ 【目录 】(已包含162篇文章)

vue+leaflet系列教程旨在为开发者提供简单快捷的,。在每一个示例中,解释相应的API知识点,做到。注意本示例目录中的内容可能加载是vue+openlayers的示例, 本目录是要加载vue+leaflet的示例,只是内容少,逐渐更新中。

大剑师兰特的GIS世界 1万+

#ifndef、#def、#endif等的含义

一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为:    #ifdef 标识符     程序段1     #else     程序段2     #endif          它的作用是:当标

Miao_Cottage的专栏 469

全功能爬虫框架:Botasaurus 的详细使用(现代化、反检测、高并发的智能爬虫框架)

Botasaurus是一个基于 Python 的全栈式智能数据采集框架。它深度融合了以下关键技术: 无头浏览器自动化(Headless Browser Automation):基于 Playwright 或 Puppeteer,支持 Chromium、Firefox、WebKit; 高级反检测引擎(Anti-Detection Engine):自动绕过 WebDriver、Canvas、AudioContext 等 50+ 种指纹检测; 声明式任务模型(Declarative Task Model):用装

数据知道的博客 4331

C 语言#ifdef 指令

本文章解释了如何在 C 语言中使用 #ifdef 预处理器指令。更多C教程请访问码农之家 描述 在 C 编程语言中,#ifdef 指令允许条件编译。预处理器会在编译过程中包含后续代码之前确定提供的是否存在。 语法 C 语言#ifdef 指令的语法是: #ifdef macro_definition macro_definition 必须为预处理器定义的定义,以将 C 源代码包含到已编译的应用程序中。 注意 #ifdef 指令必须由#endif 指令关闭。 例子 以下...

wuxiaopengnihao1的博客 8524

C语言中-条件编译#ifdef的妙用详解_透彻

本文主要介绍c语言中条件编译相关的预编译指令,包括  #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined。 #define            定义一个预处理 #undef            取消的定义 #if                   编译预处理中的条件命令,相当于C语法中的if语句 #ifdef    ...

LJianDong的博客 3万+

C/C++条件编译:#ifdef、#else、#endif等

标识符可以由大写字母、小写字母、数字和下划线字符组成且首字符不能是数字。当预处理器在预处理器指令中发现一个标识符时,它会把该标识符当作已定义的或未定义的。这里的已定义表示由预处理器定义。如果标识符是同一个文件中由前面的#define指令创建的名,而且没有用#undef 指令关闭,那么该标识符是已定义的。如果标识符不是,假设是一个文件作用域的C变量,那么该标识符对预处理器而言就是未定义的。1000// LIMIT是已定义的#define GOOD // GOOD 是已定义的。

Shujie 1万+

#ifndef、#def、#endif等是什么意思

#ifndef、#def、#endif等是什么意思基础很重要,偶开始补习基础了,每天多会写点上来。。。。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为:     #ifdef 标识符   

小发猫 3815

C语言详解#ifdef及妙用

这几个是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。  条件编译命令最常见的形式为: #ifdef 标识符  #else 程序段2  #endif  它的作用是: 当标识符已

thebestleo的专栏 3万+

C语言详解#ifdef[转]

 C语言详解#ifdef这几个是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。     条件编译命令最常见的

leoxiang的专栏 395

C语言详解#ifdef等妙用

这几个是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。     条件编译命令最常见的形式为:     #ifdef 标识符     程序段1     #else     程序段2     #endi

zhengbo2006的专栏 1613

C语言详解#ifdef和妙用

C语言详解#ifdef这几个是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指 定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。     条件编译命令最常见的形式为:     #ifdef 标识符     程序段1     #else    

dllbl的专栏 1286

C语言之预处理命令使用详解----#if、#endif、#undef、#ifdef、#else、#elif

在接触#if、#undef这类预处理指令前,大部分都都接触过#define、#include等预处理命令,通俗来讲预处理命令的作用就是在编译和链接之前,对源文件进行一些文本方面的操作,比如文本替换、文件包含、删除部分代码等,这个过程叫做预处理(在编译之前对源文件进行简单加工)它的意思是,如果该已被定义过,则对程序段1进行编译,否则对程序段2进行编译(这个和上面的#if一样最后都需要#endif),上述格式也可以不用#else,这一点上和if else相同。

Sunflower的博客 1万+

详细讲解 C 语言中的 #ifndef 和 #endif 语法

ifndef 和 #endif 是 C 语言中的条件编译指令,主要用于防止头文件的重复包含,以及在编译时根据不同条件选择性地包含代码。它们是编写高效、可维护 C 代码的基础工具之一,特别是在多文件、大型项目中尤为重要。通过合理使用这些指令,我们可以避免编译冲突、提高编译效率,并能在不同的环境下灵活控制代码的执行。

weixin_52734695的博客 7277

c语言 ifdef用法,条件编译ifdef_ifndef_endif用法

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?前言C语言中的预处理功能有三种,分别是定义,文件包含和条件编译,这里说的就是”条件编译”.其实看名字就能看出来,满足一定条件才进行编译,是给编译器看的.只要学过if else语句的人,就能很容易理解这个.#ifdef就是”if define”的意思,即”如果定义了”12345#ifdef 标识符1程序段1#else程序...

weixin_36410077的博客 1万+

C语言#if,#ifdef,#ifndef条件编译用法汇总

条件编译是根据实际定义(某类条件)进行代码静态编译的手段。可根据表达式的值或某个特定是否被定义来确定编译条件。最常见的条件编译是防止重复包含头文件的

a只如初见的博客 2万+

C语言 条件编译

ifdef#ifdef用来检查某个是否已被定义。如果被定义,#ifdef之后的代码会被编译;如果没有定义,代码则会被忽略。例如:#endif如果DEBUG已定义,printf语句会被编译;如果DEBUG没有定义,这段代码就不会被编译。#endif(end if)#endif用来结束#ifdef块,表示条件编译的结束。它标志着条件编译的结束位置。#ifdef和#endif用于条件编译,根据是否定义来决定是否编译某段代码。

m0_51103119的博客 1260

AD_ad7768_ad7768驱动代码_AD7768-4程序_AD7768-1的FPGA驱动程序

ADC AD7768-1单通道24bitADC驱动程序

北邮人工智能专业-BUPT神经网络与深度学习课程设计含完整源码、数据集资料等(基础的CNN+GRU模型到先进的Transformer架构).zip

北邮人工智能专业-BUPT神经网络与深度学习课程设计含完整源码、数据集资料等(基础的CNN+GRU模型到先进的Transformer架构).zip本项目是北京邮电大学22级人工智能专业《神经网络与深度学习》课程设计,旨在使用多种深度学习模型自动为时尚图片生成自然语言描述。项目采用DeepFashion-MultiModal数据集,实现了从基础的CNN+GRU模型到先进的Transformer架构,再到大模型微调(Qwen2-VL)的完整技术方案。通过BLEU、METEOR、ROUGE、CIDEr四种评价指标对模型性能进行全面评估,最终对比自训练模型与预训练大模型的差异。主要功能实现多种图像描述生成模型架构(CNN+GRU、CNN+GRU+GloVe、Attention机制、Transformer编码解码器)支持区域特征表示和全局特征表示的图像编码方式集成自注意力机制和交叉注意力机制提供Qwen2-VL大模型微调功能(需要30GB+显存)实现四种标准评价指标用于模型性能评估

上一篇: 中研院院士王汎森:如果让我重做一次研究生
下一篇: 搭建vsFTPd服务器可能出现的问题
forcoder
博客等级 码龄19年 19粉丝 11原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值