编译预处理:#if

2023-11-05

用法

#if <expression>

#elif

#end

<expression> 是整数常量比较的表达式,例如:

  • defined表达式,例如 defined AAA, 或者 defined(AAA), 如果AAA是一个宏定义,return true,否则,return false;
  • 单个整数,例如:1/10/100/0, 非零为true,零为false;
  • 整数比较,例如:1 == 1为true, 0 == 0为ture, 1 > 2为false;
  • 单个的字符,例如:‘A’ == ‘A’ 为true, ‘A’ == 'C’为false, 我推测最终还是转化为ASIC码,然后进行整数的比较;
  • 如果出现两个未定义的变量,例如 AAA == BBB, 永远为true,我推测测试AAA和BBB都会被认为是零,即 0 == 0,所以永远为true;关于这一点,可以参考CppReference

After all macro expansion and evaluation of defined, __has_include (since C++17), and __has_cpp_attribute (since C++20) expressions, any identifier which is not a boolean literal is replaced with the number ​0​ (this includes identifiers that are lexically keywords, but not alternative tokens like and).
Then the expression is evaluated as an integral constant expression.

切记,

  • 不允许字符串的比较,例如 “AAA” == “AAA”, “AAA” == “BBB”, 编译会报错;当然,这本来也不应该使用==,对于字符串的比较应该使用strcmp,但是又由于是编译预处理,strcmp作为一个函数是没办法使用的。。。

参考:
https://stackoverflow.com/questions/2335888/how-to-compare-strings-in-c-conditional-preprocessor-directives

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译预处理:#if 的相关文章

随机推荐

  • radius服务器无响应,radius认证(radius认证超时)

    radius认证 RADIUS是英文 RemoteAuthenticationDialInUserService 的缩写 是网络远程接入设备的客户和包含用户认证与配置信息的服务器之间信息交换的标准客户 服务器模式 它包含有关用户的专门简档
  • Mac系统上配置Vue.js环境

    在Mac系统上配置Vue js环境非常麻烦 幸运地找到了教程http www mamicode com info detail 1786370 html 第一步 Mac OS系统安装 brew 在终端运行 usr bin ruby e cu
  • 纯CSS实现导航栏下拉动画效果

    实现思路 导航栏的下拉效果通过在ul的li里再嵌套一个ul 再通过animation属性改变第二导航栏ul的高度来实现导航栏下拉动画效果 老铁没毛病 实现效果 HTML代码 div class nav ul li a href 奥利给 a
  • PHP-代码执行函数-命令执行函数

    目录 代码执行函数 1 eval 函数 2 assert 函数 3 call user func 函数 4 create function 函数 5 array map 函数 6 call user func array 函数 7 arra
  • 哲理故事300篇(中)

    哲理故事300篇 上 http blog csdn net andylin02 archive 2006 08 23 1109314 aspx 哲理故事300篇 下 http blog csdn net andylin02 archive
  • LeetCode动态规划—跳跃游戏从跳到头到跳最少下跳到头(45、55)

    跳跃游戏 跳跃游戏 跳跃游戏 跳跃游戏 一个下标对应的值为3 那证明这个位置可以跳到前后3个位置的下标处 3均可达 如果依次遍历完这个数组 有下标在跳跃过程中最远位置仍然不可达 即证明无法到达最后一个位置 可以对每一个能作为 起跳点 的格子
  • 通讯录管理系统(C++)

    目录 1 功能分析与实现步骤 2 代码编写 2 1 联系人和通讯录结构体设计 2 2 通讯录页面 2 3 添加联系人 2 4 显示所有联系人 2 5 检测联系人 2 6 删除指定联系人 2 7 查找指定联系人 2 8 更改指定联系人 2 9
  • onu光功率多少是正常_发射光功率和接收灵敏度对光模块有什么影响

    我们在选购光模块需要留意发射光功率和接收灵敏度这两个参数 因为这两项参数是确保光模块正常通信关键因素之一 下面易天光通信 ETU LINK 就给大家介绍发射光功率和接收灵敏度分别是什么 以及如何测试光模块的光功率在正常范围呢 深圳易天光通信
  • python ssh登录偶然认证失败_paramiko.ssh_异常.AuthenticationException:身份验证失败

    import paramiko class SSHConnection object def init self host username password port 22 self sftp None self sftp open Fa
  • TypeScript--类型问题汇总

    学过js你认识的类型 boolean number string undefined null symbol object 你可能不认识的类型 void any unknown never 类型声明是TS非常重要的一个特点 通过类型声明可以
  • ORL Faces Database介绍

    ORL人脸数据集共包含40个不同人的400张图像 是在1992年4月至1994年4月期间由英国剑桥的Olivetti研究实验室创建 此数据集下包含40个目录 每个目录下有10张图像 每个目录表示一个不同的人 所有的图像是以PGM格式存储 灰
  • sql注入详解

    sql注入详解 SQLI介绍 SQLI sql injection 我们称之为sql注入 sql Structured Query Language 叫做结构化查询语句 在我们的应用系统使用 sql 语句进行管理应用数 据库时 往往采用拼接
  • AWS SAA-C03 #108

    A company has an automobile sales website that stores its listings in a database on Amazon RDS When an automobile is sol
  • 如何爬取淘宝电商数据

    在爬取淘宝电商数据之前 请务必遵守淘宝的相关规则和政策 并获得合法的授权 爬取淘宝数据的方法有很多种 这里介绍几种常见的方法 使用淘宝开放平台的 API 接口 淘宝开放平台提供了许多 API 接口 可以让开发者获取淘宝数据 使用 API 接
  • Github桌面端上传远程仓库以及将私有仓库改为公有仓库的方法

    1 桌面端上传远程仓库 pass 1 在github上下载一个桌面端应用程序 exe pass 2 用自己的github进行登录 可以在程序的头部栏看到一些应用操作 下载后登录了解即可 可以打开自己的github仓库 再打开本地文件夹 上传
  • C++ UTF-8编码识别(分析文件内容,非文件头)

    UTF 8编码的文本文档 有的带有BOM Byte Order Mark 字节序标志 即0xEF 0xBB 0xBF 有的没有 Windows下的文本编辑器在保存UTF 8格式的文本文档时会自动添加BOM到文件头 在判断这类文档时 可以根据
  • 入职银行外包开发工作 4 月有余,聊聊外包公司工作的一些真实感受

    最近发现很多小伙伴对外包工作的经历比较感兴趣 今天分享一篇关于在外包工作的真实经历和感受的文章 文章内容都来自在外包公司工作的读者的真实经历 本人普通二本本科毕业 4 年 目前是在广州工作 是一家大型的人力外包公司外包到银行的开发人员 这可
  • Python爬虫实战之爬淘宝商品并做数据分析

    前言 是这样的 之前接了一个金主的单子 他想在淘宝开个小鱼零食的网店 想对目前这个市场上的商品做一些分析 本来手动去做统计和分析也是可以的 这些信息都是对外展示的 只是手动比较麻烦 所以想托我去帮个忙 一 项目要求 具体的要求如下 1 在淘
  • 新星计划->Python循环语句while_for_猜拳游戏的实现-学习笔记

    作者 芝士小熊饼干 系列专栏 数据结构 gt 线性表 支持我 点赞 收藏 留言 新星计划参与者 创作不易 十年运道龙困井 一朝得势入青云 金鲤岂是池中物 一遇风雨变化龙 本节将学会while for in的一些基础用法及注意事项 while
  • 编译预处理:#if

    用法 if