当前位置:网站首页>弄懂#if #ifdef #if defined
弄懂#if #ifdef #if defined
2022-08-04 15:15:00 【代码乌龟】
1.#if #ifdef #if defined三者区别
- #if 后面接的是
表达式 - #ifdef和#if defined后面接的式
宏定义
2.#if
#if 和条件判断 if 的用法相似,不过将 else -> #else 、else if -> #elif。同时凡是条件编译,均需要#endif 结尾。
同时需要注意的是:#if 命令要求判断条件为整型常量表达式,也就是说表达式中不能包含变量,而且结果必须是整数;而if后面的表达式没有限制,只要符合语法就行。
#define select 0
#if (select > 1)
printf("select > 1");
#elif (select == 1)
printf("select == 1");
#else
printf("select < 1");
#endif
上述例子就是根据select和1的大小 选择编译不同的语句。
再看下面的代码:
#include "stdio.h"
#define MAX 10
int main()
{
#if MAX == 1
printf("MAX已被定义\n");
#else
printf("MAX未被定义\n");
#undef MAX//取消之前的MAX的定义
#define MAX 20
#endif
printf("MAX = %d\n", MAX);
return 0;
}
执行结果如下:
上述内容参考至:https://www.cnblogs.com/lanhaicode/p/10546514.html
3. #ifdef 和 #if defined
1)#ifdef 的作用是判断某个宏是否定义,如果该宏已经定义则编译后面的代码。
#ifdef TEST
printf1("TEST");
#else
print2("NONE TEST");
#endif
2)这里 #ifdef 后面仅能接一个宏定义,当我们需要同时判断多个宏定义时,就需要用到 #if defined。如下:
#if defined TEST1 || defined TEST2
printf1("TEST1 or TEST2 def");
#else
printf2("none of TEST1 TEST2 def");
#endif
3)和 #if 一样, #ifdef 和 #if defined也可以搭配 #else 、#elif使用,并且也要求以#endif 结尾。如下:
#if defined TEST && defined CAL
printf1("TEST CAL def");
#elif defined TEST2
printf1("TEST2 def");
#else
printf1("other def");
#endif
上面示例中的第一个判断 #if defined TEST && defined CAL如果只有一个宏,如 #if defined CAL,那么你也可以这样写 #ifdef CAL,二者等价。
总结
- 用
#if 0的形式可以做到整段代码的注释 - #ifdef 后面只能接一个宏定义
- #if defined的形式后面可以接多个宏定义
边栏推荐
- Technology sharing | Mini program realizes audio and video calls
- 技术分享| 融合调度系统中的电子围栏功能说明
- 图解 SQL,这也太形象了吧!
- Resharper 如何把类里的类移动到其他文件
- C# BBcode 转 Markdown
- 基于 Next.js实现在线Excel
- [Beiya data recovery] IBM System Storage storage lvm information lost data recovery solution
- Hangzhou Electric School Competition (Counter Attack Index)
- vim 常用操作命令
- 【Today in History】August 4: First female Turing Award winner; NVIDIA acquires MediaQ; first Cybersecurity Challenge completed
猜你喜欢

我在羊毛和二手群里报复性消费

Technology sharing | Mini program realizes audio and video calls

JCMsuite Application: Oblique Plane Wave Propagation Transmission Through Aperture

uni-app 从零开始-生命周期(二)

leetcode: 251. Expanding 2D Vectors

洛谷题解P1028 数的计算

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

leetcode:251. 展开二维向量

从-99打造Sentinel高可用集群限流中间件

实战:10 种实现延迟任务的方法,附代码!
随机推荐
HarePoint Analytics for SharePoint Online
eNSP-小型网络拓扑(DNS、DHCP、网站服务器、无线路由器)
微软表示将向内部网络安全专家共享数据 为企业提供更安全保护
Technology sharing | Mini program realizes audio and video calls
24、shell编程-流程控制
Online Excel based on Next.js
洛谷题解P4326 求圆的面积
This week to discuss the user experience: Daedalus Nemo to join Ambire, explore the encryption of the ocean
vim 常用操作命令
leetcode:212. 单词搜索 II
技术分享| 小程序实现音视频通话
Next -20- 使用自定义样式 (custom style)
AOSP内置APP特许权限白名单
Zheng Qing freshmen school competition and middle-aged engineering selection competition
RTC 场景下的屏幕共享优化实践
附加:自定义注解(参数校验注解);(写的不好,别看…)
手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果
[Beiya data recovery] IBM System Storage storage lvm information lost data recovery solution
Unity AR阴影投射透明地面 仅渲染模型实时阴影 Shader实现
浅谈一下跨端技术方案