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

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

         我偶尔写着好玩的. 应该又出处,但是害怕兼容性有问题.如下:       //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 内部.

posted on   norsd  阅读(228)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏

导航

< 2007年8月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示