我在 if 语句中看到的是这样的。
if((var = someFunc()) == 0){
...
}
会不会声明
(var = someFunc())
无论我们在什么环境中,总是返回 var 的最终值?
我在 if 语句中看到的是这样的。
if((var = someFunc()) == 0){
...
}
会不会声明
(var = someFunc())
无论我们在什么环境中,总是返回 var 的最终值?
这只是一种分配给变量并同时比较返回值的单行方式。
您需要在赋值两边加上括号,因为比较运算符的优先级高于赋值运算符,否则var
将被赋值为someFunc() == 0
.
这是完全错误的。var
被赋值,然后它的值被一个常量覆盖0
。函数的返回值因此丢失,并且if
总是失败。如今,大多数编译器可能会对此发出警告,这既是因为 an 内的赋值,if
也是因为不可能if
导致结果。做可能打算做的事情的正确方法是
if((var = someFunc()) == 0) {
(请注意,这也可能是恶意代码试图以常见的新手错误为幌子引入漏洞。最近有一个案例有人试图将支票偷运到他们将 UID 分配为 0 的 Linux 内核中(即, root),同时假装检查自己是否是 root。但是没有用。)
这个是对的,我一直在用
if ((f=fopen(s,"r"))==NULL) return(fprintf(stderr,"fopen(%s,r) 失败, errno=%d, %s\n",s,errno,strerror (错误号)));/* 成功打开文件 s,从 FILE *f 中任意读取 */
我在 calloc() 内存时也使用它。
您正在将 someFunc (在我的情况下为 fopen 或 calloc )的返回值分配给一个变量并测试该返回值,这是一种语义快捷方式,假设您永远不想单独调试分配和测试。