野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1404|回复: 3

关于火哥视频中#elif #ifndef #endif的学习笔记

[复制链接]
发表于 2023-8-24 13:24:32 | 显示全部楼层 |阅读模式
#elif指令的使用
一、#elif概述
#elif指令可以在多个条件语句中进行选择,它用于在一个条件不成立的情况下执行另一个条件。#elif可以理解为“否则,如果”的意思,是条件编译中的重要指令之一。

二、#elif的语法和用法
#elif的语法与#if和#else相似,如下所示:

#ifdef 宏名
    程序段1
#elif defined(宏名1) && defined(宏名2)
    程序段2
#else
    程序段3
#endif
其中,#ifdef是判断某个宏已经定义的指令,defined()是一个宏定义的判断函数,&&表示并且。

在编译时,如果宏名被定义,则程序段1被执行,如果宏名1和宏名2都被定义,则程序段2被执行,若以上条件都不成立,则程序段3被执行。

三、#elif的实例展示
#elif用于平台兼容性
在不同的平台上,编译器的习惯不同,处理多个操作系统的代码有时需要另外编写。下面的例子演示了如何使用两个不同的区块来编写代码,以应对不同的操作系统。

#ifdef _WINDOWS
    #include <windows.h>
    typedef HWND NativeWindow;
#elif defined _LINUX
    #include <X11/Xlib.h>
    typedef Window NativeWindow;
#else
    #error "unknown platform"
#endif
这里假设宏名_WINDOWS和_Linux分别表示Windows和Linux平台。如果_WINDOWS被定义,则将windows.h文件包含进来,并将typedef定义为HWND类型,否则如果_Linux被定义,则将X11/Xlib.h文件包含进来,并将typedef定义为Window类型,否则编译器将产生一个警告“unknown platform”。

#elif用于版本控制
在软件开发中,经常需要实现不同版本的功能。这个过程中,可能需要根据不同的版本来包含不同的代码文件,这时候就可以使用#ifdef, #elif和#endif等指令来达到目的。

#define VERSION 10
#if VERSION == 10
    #include "version10.h"
#elif VERSION == 20
    #include "version20.h"
#elif VERSION == 30
    #include "version30.h"
#else
    #error "unsupported version"
#endif
这里假设宏名VERSION表示软件版本,然后使用#if和#elif判断当前版本是10、20还是30,然后将相应的头文件包含进来,如果是其他版本,则编译器将会产生一个警告信息“unsupported version”。

#elif用于平台优化
有时候,一些参数在不同的平台上可能需要做一些差异化的处理,比如代码优化。这个时候可以使用条件编译来实现针对不同平台下的优化。

#ifdef _MSC_VER
    #pragma optimize("", off)
#elif defined(__GNUC__)
    #pragma GCC optimize("O0")
#endif
int main() {
    // some code
    return 0;
}
在这个预处理例子中,我们假设宏名_MSC_VER表示微软编译器,在这里关闭代码优化参数。而如果编译器是GCC,优化参数被设置为O0。

四、总结
#elif是一个非常有用的条件指令。它可以帮助我们针对不同的条件对代码进行选择,从而达到不同的效果。使用#elif可以帮助我们编写出更加灵活与高效的程序。
学习内容摘抄自https://www.python100.com/html/T32O60NC3S0Z.html
回复

使用道具 举报

发表于 2023-8-24 16:08:05 | 显示全部楼层
66
回复

使用道具 举报

发表于 2023-8-25 08:42:45 | 显示全部楼层
回复

使用道具 举报

发表于 2023-12-3 00:07:06 | 显示全部楼层
所以说#if内的语句只能是宏定义吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 09:22 , Processed in 0.036231 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表