c - 没有if的if语句?

标签 c

我看到的代码看起来像是在尝试执行一个没有实际 if 的 if 语句,我很困惑它实际上在做什么。例如,

int* value;
int thisValue = 0;
int checkedValue = 1;
*value = thisValue == checkedValue

这实际上是在执行没有 if 的 if 语句吗?

最佳答案

这只是计算一个 bool 表达式。并将其存储在 value 指向的任何内存位置(在您的特定代码段中 value 未分配,因此行为未定义)。

if 允许您根据 bool 表达式的值执行不同的代码。

例如,

if (a == b) {
  printf("a and b are the same\n");
}

行为相同:

int same = (a == b);
if (same) {
  printf("a and b are the same\n");
}

尽管第一个通常更清晰,除非您有某种理由希望在 if 语句之后使用 same 变量。但第二种更接近 C 代码在编译时将生成的机器指令。

尽管像 == 这样的 bool 比较运算符经常在 if 语句中使用,但没有什么可以强制在那里使用它们.您可以在代码中的任何位置使用 == 运算符来生成 bool 表达式,就像您可以在任何位置使用 + 运算符来生成数值表达式一样。

关于c - 没有if的if语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22547396/

相关文章:

c - 将浮点值存储到无符号字符数组

c - 我应该如何使用 fgetc 忽略来自 stdin 的换行符?

无论我输入什么,C double 都为 0

c - 过滤 Arp 回复

c - Ubuntu 20.04 之后可以使用 addr2line 吗?

mysql_use_result 踩踏已用内存 Ansi-C

c++ - C/C++ - 可执行路径

c - 线程中的数组范围

c - 不应使用 MISRA C 2012 规则 20.5 #undef

java - Java 和 C/C++ 在多线程方面的区别