Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中,是否可以在一行代码中为变量初始化添加条件?_C_Variables - Fatal编程技术网

在C语言中,是否可以在一行代码中为变量初始化添加条件?

在C语言中,是否可以在一行代码中为变量初始化添加条件?,c,variables,C,Variables,我不太明白这句话: bool static_read = static_tactile_to_update != -1 && !CapSense_IsBusy(); static\u read用一个值初始化,该值为static\u tactile\u to\u update(一个介于-1和27之间的int值)。 是否执行!=-1 && !CapSense_IsBusy() 表示如果static\u tactile\u to\u update为-1,则static\u read将

我不太明白这句话:

bool static_read = static_tactile_to_update != -1 && !CapSense_IsBusy();
static\u read
用一个值初始化,该值为
static\u tactile\u to\u update
(一个介于-1和27之间的int值)。 是否执行
!=-1 && !CapSense_IsBusy()
表示如果
static\u tactile\u to\u update
-1
,则
static\u read
将不会收到此变量?(或者如果
CapSense\u IsBusy()
返回
true


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

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

static\u read
始终指定表达式求值的结果:

static_tactile_to_update != -1 && !CapSense_IsBusy();
这意味着如果
静态触觉更新
不是
-1
并且
CapSense\u IsBusy()
返回
false
,则是
正确的唯一方法

在每种情况下,变量都被赋值,而不是有条件地赋值

条件赋值如下所示:

bool static_read;

if (...)
  static_read = true;

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

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

static\u read
始终指定表达式求值的结果:

static_tactile_to_update != -1 && !CapSense_IsBusy();
这意味着如果
静态触觉更新
不是
-1
并且
CapSense\u IsBusy()
返回
false
,则是
正确的唯一方法

在每种情况下,变量都被赋值,而不是有条件地赋值

条件赋值如下所示:

bool static_read;

if (...)
  static_read = true;

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

由于运算符优先级的原因,这被解释为

bool static_read = ((static_tactile_to_update != -1) && !CapSense_IsBusy());
它不是将
static\u read
设置为
static\u tactile\u to\u update
的值,而是将其设置为与
-1
进行比较的值,并在逻辑上与
进行and运算!CapSense_IsBusy()

此外,由于
和&
短路,它仅在
静态触觉更新时调用
CapSense\u IsBusy()
-1

完整逻辑基本上与此等效:

bool static_read;
if (static_tactile_to_update != -1) {
    static_read = !CapSense_IsBusy();
} else {
    static_read = false;
}

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

bool static_read = ((static_tactile_to_update != -1) && !CapSense_IsBusy());
它不是将
static\u read
设置为
static\u tactile\u to\u update
的值,而是将其设置为与
-1
进行比较的值,并在逻辑上与
进行and运算!CapSense_IsBusy()

此外,由于
和&
短路,它仅在
静态触觉更新时调用
CapSense\u IsBusy()
-1

完整逻辑基本上与此等效:

bool static_read;
if (static_tactile_to_update != -1) {
    static_read = !CapSense_IsBusy();
} else {
    static_read = false;
}


应该使用括号:
boolstatic\u read=((static\u tactile\u to\u update!=-1)和&!CapSense\u IsBusy())静态触觉到更新的值!=-1
为真或假。同样的function@FiddlingBits:括号不是必需的,尽管其中一些可能会澄清表达式的解释。@JonathanLeffler你说得对。我应该说“为了清晰起见应该使用括号”。括号应该使用:
boolstatic\u read=((static\u tactile\u to\u update!=-1)和&!CapSense\u IsBusy()静态触觉到更新的值!=-1
为真或假。同样的function@FiddlingBits:括号不是必需的,尽管其中一些可能会澄清表达式的解释。@JonathanLeffler你说得对。我应该说“为了清晰起见应该使用括号”。注意:如果
static\u tactile\u to\u update==-1
那么
CapSense\u IsBusy()
将不会执行注2:只有当
静态读取
具有自动存储持续时间时,才可能执行此操作。注:如果
静态触觉更新==-1
CapSense\u正忙()
将不会执行注意2:只有当
静态读取
具有自动存储持续时间时,才可能执行此操作。注意:只有当
静态读取
具有自动存储持续时间时,才可能执行此操作。@P\u J\uuuu您不能调用函数初始化全局变量。但如果是局部静态变量,则是正确的。局部静态变量和全局变量可能具有线程或静态存储持续时间。在这种情况下,除了范围之外,它们之间没有区别。所以只有自动的可以通过非常量表达式(当然也包括函数调用)@chux初始化。我错误地认为可以动态初始化本地静态。@P_uj_uu我假设您的第一条注释暗示该函数可以用于初始化非自动的内容。注意:只有当
static\u read
具有自动存储持续时间时,才可能这样做。@P_uj_u您不能调用函数来初始化全局变量但如果是局部静态变量,则是正确的。局部静态变量和全局变量可能具有线程或静态存储持续时间。在这种情况下,除了范围之外,它们之间没有区别。所以只有自动的可以通过非常量表达式(当然也包括函数调用)@chux初始化。我错误地认为可以动态初始化本地静态。@P_uj_uu我假设您的第一条注释暗示该函数可用于初始化非自动的内容。