首页 > 解决方案 > 为什么在以下情况下使用赋值运算符而不是等于运算符?

问题描述

您应该有一个条件,该条件应该评估为真或假,以便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;

标签: cif-statementconditional-statementsselection

解决方案


C11规范,第 6.5.16 章,

" 赋值表达式在赋值后具有左操作数的值 [....]"

所以基本上,你的代码是一样的

p=fopen("test.txt","r");
if(p) {  // or, if (p != NULL) for ease of understanding
 // do something

 }

推荐阅读