当前位置:网站首页>变量与“零值”的比较
变量与“零值”的比较
2022-07-06 14:40:00 【是北豼不太皮吖】
bool 变量与“零值”进行比较
bool 变量与“零值”进行比较的 if 语句怎么写?
bool bTestFlag = FALSE;
想想为什么bool 变量一般初始化为 FALSE 比较好?
可以让这个布尔变量取反后是非零,因为FLASE 的值大家都知道,在编译器里被定义为0;但TRUE 的值呢?都是1吗?很不幸,不都是1。Visual C++定义为1,而它的同胞兄弟Visual Basic 就把TRUE 定义为-1。那很显然FALSE取反后是TRUE,但TRUE取反后不是FLASE。
A), if(bTestFlag == 0);
if(bTestFlag == 1);
B), if(bTestFlag == TRUE);
if(bTestFlag == FLASE);
C), if(bTestFlag);
if(!bTestFlag);
哪一组或是那些组正确呢?我们来分析分析:
A)写法:bTestFlag 是什么?整型变量?如果要不是这个名字遵照了前面的命名规范,恐怕很容易让人误会成整型变量。所以这种写法不好。
B)写法:FLASE 的值大家都知道,在编译器里被定义为 0;但 TRUE 的值呢?都是 1吗?很不幸,不都是 1。Visual C++定义为 1,而它的同胞兄弟 Visual Basic 就把 TRUE 定义为-1.那很显然,这种写法也不好。
大家都知道 if 语句是靠其后面的括号里的表达式的值来进行分支跳转的。表达式如果为真,则执行 if 语句后面紧跟的代码;否则不执行。那显然,本组的写法很好,既不会引起误会,也不会由于 TRUE 或 FLASE 的不同定义值而出错。记住:以后写代码就得这样写。
整型变量与“零值”比较
应当将整型变量用“==”或“!=”直接与0比较。
if (value == 0)
if (value != 0)
//不可模仿布尔变量的风格而写成
if (value) // 会让人误解 value是布尔变量
if (!value)
float 变量与“零值”进行比较
float 变量与“零值”进行比较的 if 语句怎么写?
float fTestVal = 0.0;
A), if(fTestVal == 0.0);
if(fTestVal != 0.0);
B), if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON)); //EPSINON 为定义好的精度。
B组是正确的
千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“> =”或“ <=”形式。
指针变量与“零值”进行比较
应当将指针变量用“==”或“!=”与NULL比较。
指针变量的零值是“空”(记为NULL)。尽管NULL的值与0相同,但是两者意义不同。
假设指针变量的名字为p,它与零值比较的标准if语句如下:
if (p == NULL) // p与NULL显式比较,强调p是指针变量
if (p != NULL)
不要写成
if (p == 0) // 容易让人误解p是整型变量
if (p != 0)
或者
if (p) // 容易让人误解p是布尔变量
if (!p)
有时候我们可能会看到 if (NULL == p) 这样古怪的格式。不是程序写错了,是程序员为了防止将 if (p == NULL) 误写成 if (p = NULL),而有意把p和NULL颠倒。编译器认为 if (p = NULL) 是合法的,但是会指出 if (NULL = p)是错误的,因为NULL不能被赋值。
边栏推荐
- Aardio - 不声明直接传float数值的方法
- C#实现水晶报表绑定数据并实现打印4-条形码
- Classic sql50 questions
- CCNA-思科网络 EIGRP协议
- GNN, please deepen your network layer~
- Force deduction question 500, keyboard line, JS implementation
- Aardio - 封装库时批量处理属性与回调函数的方法
- Data processing skills (7): MATLAB reads the data in the text file TXT with mixed digital strings
- QT | UDP broadcast communication, simple use case
- 重磅新闻 | Softing FG-200获得中国3C防爆认证 为客户现场测试提供安全保障
猜你喜欢

RESNET rs: Google takes the lead in tuning RESNET, and its performance comprehensively surpasses efficientnet series | 2021 arXiv

【10点公开课】:视频质量评价基础与实践

NPDP认证|产品经理如何跨职能/跨团队沟通?

Powerful domestic API management tool

Xiaoman network model & http1-http2 & browser cache

Oracle-控制文件及日志文件的管理

GPS from getting started to giving up (19), precise ephemeris (SP3 format)

Memorabilia of domestic database in June 2022 - ink Sky Wheel

LeetCode 练习——剑指 Offer 26. 树的子结构

Classic sql50 questions
随机推荐
硬件開發筆記(十): 硬件開發基本流程,制作一個USB轉RS232的模塊(九):創建CH340G/MAX232封裝庫sop-16並關聯原理圖元器件
OpenCV VideoCapture. Get() parameter details
That's why you can't understand recursion
C#實現水晶報錶綁定數據並實現打印4-條形碼
Oracle-控制文件及日志文件的管理
[linear algebra] determinant of order 1.3 n
HDR image reconstruction from a single exposure using deep CNNs阅读札记
Data storage (1)
AI enterprise multi cloud storage architecture practice | Shenzhen potential technology sharing
C#实现水晶报表绑定数据并实现打印4-条形码
labelimg的安装与使用
What a new company needs to practice and pay attention to
Chapter 3: detailed explanation of class loading process (class life cycle)
Attack and defense world miscall
The nearest common ancestor of binary (search) tree ●●
[10:00 public class]: basis and practice of video quality evaluation
Mise en place d'un environnement de développement OP - tee basé sur qemuv8
go多样化定时任务通用实现与封装
Report on technological progress and development prospects of solid oxide fuel cells in China (2022 Edition)
Unity3d Learning Notes 6 - GPU instantiation (1)