在一条语句中同时实现赋值+判断

本文探讨了一种在单条语句中同时完成变量赋值与条件判断的方法,并通过示例代码展示了如何使用VC2005的编译器特性来实现这一功能。文章澄清了一些关于该用法可能存在兼容性问题的误解。

在一条语句中同时实现赋值+判断 

         我偶尔写着好玩的. 应该又出处,但是害怕兼容性有问题.如下:       //2007.10.10 论述错误,见注

LPVOID lpProcessBuf = NULL;
 if( NULL == ( lpProcessBuf = VirtualAllocEx(................))  )
 {...................} 

在这条语句中 VirtualAllocEx 返回值到 lpProcessBuf,  然后判断 lpProcessBuf 是否为NULL.

在编译器VC 2005 通过.

//下文论述错误

不确定有的编译器解释为: 如果 lpProcessBuf = VirtualAllocEx(...) 赋值成功与否的返回值与 NULL 比较,这样就出问题了. 因为 lpProcessBuf = VirtualAllocEx(...) 总是会赋值成功的, 也总是会返回 TRUE. 就像if( dwData = NULL )总是返回TRUE.

//论述错误

 

2007.10.10

补充上文有错误, 不会有什么兼容性问题. 对于  A = B  , 这个表达式, 返回的是左值, 也就是A

那么 if( A = B )   也就是 1. A= B   2. 判断A是否为0  (真假)

if( dwData = NULL ) 总是返回TRUE是错误的,  if 判断 dwData 为 0 (为假),  则不会进入if 内部.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值