c - 为什么在以下情况下使用赋值运算符而不是等于运算符?
问题描述
您应该有一个条件,该条件应该评估为真或假,以便if
语句起作用。我不明白p=fopen("test.txt", "r")
以下代码的一部分如何评估为真或假,因为它只包含一个赋值运算符=
而不是一个==
运算符。
#include <stdio.h>
int main()
{
FILE *p;
if(p=fopen("test.txt","r"))
{
printf("yes\n");
}
else
printf("no\n");
return 0;
解决方案
从C11
规范,第 6.5.16 章,
" 赋值表达式在赋值后具有左操作数的值 [....]"
所以基本上,你的代码是一样的
p=fopen("test.txt","r");
if(p) { // or, if (p != NULL) for ease of understanding
// do something
}
推荐阅读
- javascript - 为什么我得到 TypeError X is not a function
- c - `*(volatile T*)0x1234;` 是否保证翻译成读指令?
- php - Laravel 5 - Accessing collection values in view
- postgresql - 即使提供了所需的网络设置,也无法通过 docker 连接到 Postgresql
- r - 如何用 lmer 混合模型表示成对观察
- git - IntelliJ Git Multiple Local Repositories, adding a new Repo ruins the 'Common Local Branches' paradigm. How to recover?
- amazon-web-services - AWS user pool authentication with external OIDC IdP
- node.js - How to use a basic promise in Node.js when waiting for database
- java - How to Stop Android emulator when it appears to both running and offline?
- c++ - Is it possible to delete declarations and macros for a specific file?