== sign是什么意思?

bun*_*nty 8 c syntax operators

我想弄清楚这个程序中的== sign意味着什么?

int main()
{
    int x = 2, y = 6, z = 6;        
    x = y == z;
    printf("%d", x);
}
Run Code Online (Sandbox Code Playgroud)

Bil*_*3rd 20

==运营商测试是否相等.例如:

if ( a == b )
    dosomething();
Run Code Online (Sandbox Code Playgroud)

并且,在您的示例中:

x = y == z;
Run Code Online (Sandbox Code Playgroud)

如果y等于z,则x为真(1).如果y 等于z,则x为假(0).

新手C程序员犯的一个常见错误(以及一些非常有经验的人犯错误)是:

if ( a = b )
    dosomething();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,b被分配给a然后被评估为布尔表达式.有时程序员会故意这样做,但这是不好的形式.另一个阅读代码的程序员不会知道它是故意(很少)还是无意中(更有可能).一个更好的结构将是:

if ( (a = b) == 0 )   // or !=
    dosomething();
Run Code Online (Sandbox Code Playgroud)

这里,b被分配给a,然后将结果与0进行比较.意图很清楚.(有趣的是,我和C#程序员一起工作过,他们从来没有写过纯粹的C,也无法告诉你这是做什么的.)

  • 这是事实,但并非总是如此.在ANSI标准存在之前,我从C开始.K&R没有说明关系运算符的结果,只是说它们决定了"结果的真或假"(第38页).他们继续说"一元否定运算符!将非零或真操作数转换为0,将0或假操作数转换为1".由于K&R是当时唯一的标准,我学会了不要对布尔表达式的结果做出假设.ANSI C(X3.159.198x)草案在"3.3.8关系运算符"和"3.3.9平等运算符"中对此进行了修正. (2认同)

Ale*_*x B 5

它是"等于"运算符.

在上面的例子中,x分配了相等test(y == z)表达式的结果.因此,如果y等于z,x则设置为1(true),否则设置为0(false).因为C(pre-C99)没有布尔类型,所以表达式求值为整数.

  • @detly:不,标准将类型`_Bool`,*定义为用户*(6.2.5.2)使用的类型.它还定义了`<stdbool.h>`定义*macro*`bool`扩展为`_Bool`(然后它仍然是出现在错误消息和警告中的名称.条款7.1.3.1使`_Bool`成为保留的标识符,但这并不意味着程序不应该使用它 - 这意味着程序不允许为此名称本身引入定义.目标是为编译器写入*和*未来标准扩展名设置名称空间.(名称`_Complex`和`_Imaginary`也适用于用户.) (2认同)
  • 哦,标准明确地说,取消定义`bool`,`true`和`false`是好的,而改变`_Bool`会导致未定义的行为. (2认同)