在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我假设您的第一条注释暗示该函数可用于初始化非自动的内容。