是否可以在 C 中的一行代码中向变量初始化添加条件?

JCS*_*CSB 1 c variables

我不太明白这个示例行:

bool static_read = static_tactile_to_update != -1 && !CapSense_IsBusy();
Run Code Online (Sandbox Code Playgroud)

static_read用一个值初始化,它是static_tactile_to_update(一个介于 -1 和 27 之间的 int 值)。如果是!= -1 && !CapSense_IsBusy()static_read则不会接收此变量的意思static_tactile_to_update-1?(或如果CapSense_IsBusy()返回true

我只想知道notand是否用作条件,如果不满足,将阻止将变量传递给新值。

Bar*_*mar 6

由于运算符优先,这被解释为

bool static_read = ((static_tactile_to_update != -1) && !CapSense_IsBusy());
Run Code Online (Sandbox Code Playgroud)

它不是设置static_read为 的值static_tactile_to_update,而是将其设置为与 比较的值,并与 进行-1逻辑与运算!CapSense_IsBusy()

此外,由于 的短路&&,它只会调用CapSense_IsBusy()if static_tactile_to_update !- -1

完整的逻辑本质上等同于:

bool static_read;
if (static_tactile_to_update != -1) {
    static_read = !CapSense_IsBusy();
} else {
    static_read = false;
}
Run Code Online (Sandbox Code Playgroud)

  • 局部静态变量和全局变量可能具有线程或静态存储持续时间。在这种情况下,除了范围之外,它们之间没有区别。因此只有自动的可以通过非常量表达式初始化(​​当然也包括函数调用) (2认同)

tad*_*man 5

这不是变量初始化的条件,而是使用涉及的逻辑运算符初始化变量。

static_read总是分配评估表达式的结果:

static_tactile_to_update != -1 && !CapSense_IsBusy();
Run Code Online (Sandbox Code Playgroud)

这意味着唯一的方法true是如果两者都不 static_tactile_to_update-1并且CapSense_IsBusy()返回false

在每种情况下,都会为变量分配一个值,而不是有条件地分配。

条件赋值看起来像这样:

bool static_read;

if (...)
  static_read = true;
Run Code Online (Sandbox Code Playgroud)

对于表达式的复杂程度也没有限制,因此您可以根据需要链接尽可能多的运算符来表达您尝试实现的逻辑。

  • 注意:如果 `static_tactile_to_update == -1` 则不会执行 `CapSense_IsBusy()` (2认同)