当前位置:网站首页>弄懂#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的形式后面可以接多个宏定义
边栏推荐
- 我爱七夕哈哈哈
- 聊聊与苹果审核员的爱恨情仇
- 基本介绍PLSQL
- 从-99打造Sentinel高可用集群限流中间件
- Cisco - Small Network Topology (DNS, DHCP, Web Server, Wireless Router)
- [Beiya data recovery] IBM System Storage storage lvm information lost data recovery solution
- 直播回放含 PPT 下载|基于 Flink & DeepRec 构建 Online Deep Learning
- AIX7.1安装Oracle11g补丁33829709(PSU+OJVM)
- 2022杭电多校3
- leetcode:253. 至少需要多少间会议室
猜你喜欢

【云原生 | 从零开始学Kubernetes】kubernetes之StatefulSet详解

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

大众点评搜索相关性技术探索与实践

1403. 非递增顺序的最小子序列

leetcode: 255 Verify preorder traversal sequence binary search tree

基本介绍PLSQL

饿了么智能头盔专利获授权,进一步提升骑手安全保障

IP第十八天笔记

1401 - Web technology 】 【 introduction to graphical Canvas

Http-Sumggling缓存漏洞分析
随机推荐
ping的原理
Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World。
Android Sqlite3 basic commands
Zheng Qing freshmen school competition and middle-aged engineering selection competition
leetcode: 250. Count subtrees of equal value
remote: Check Access Error, please check your access right or username and password!fatal: Authenti
This week to discuss the user experience: Daedalus Nemo to join Ambire, explore the encryption of the ocean
vim 常用操作命令
洛谷题解P1028 数的计算
C# 判断文件编码
多线程编程之优先级翻转问题
16. Learn MySQL Regular Expressions
直播回放含 PPT 下载|基于 Flink & DeepRec 构建 Online Deep Learning
##ansible自动化运维架构与简介
Next -20- 使用自定义样式 (custom style)
大众点评搜索相关性技术探索与实践
Oracle database user creation, restart, import and export
Basic Introduction for PLSQL
16、学习MySQL 正则表达式
24、shell编程-流程控制