我正在尝试将一段伪代码转换为C代码,但我有类似的情况
if (-4 <= X <=8)
THEN {Do Something}
else
{Do something else}
if语句中的语法是否有效? 可以在逻辑条件中的变量之前放置一个常量以检查真值吗?
THEN来自哪里?
@ dasblinkenlight-我认为OP是从伪代码中获得的,并正在尝试将其转换为C代码。
它作为语法是正确的,但可能与意图有所不同。
对链接比较运算符(x
在C语言中,您无法编写类似
if (-4 <= X <= 8) {
// ...
} else {
// ...
}
相反,您将不得不将其分为两个单独的检查:
if (-4 <= X && X <= 8) {
// ...
} else {
// ...
}
这段代码现在完全可以了-您可以在<=运算符的任何一侧都具有所需的任何操作数。
好吧,从技术上讲您可以,但是它并没有达到您(数学上)的期望。 这会导致一些有趣的情况,例如5 < 12 < 4为true(5 < 12为true,这转换为1,因此表达式变为1 < 4,这也是如此)。 尝试时,GCC会发出警告。
请注意,在某些语言(显然不是C)(如Python)中,您可以执行-4 <= X <= 8之类的操作,它将获得预期的数学结果。
是的,您可以将常量作为C中逻辑检查的左手参数。
但是,您列出的伪代码将需要分为两个表达式:
if ((-1 <= X) && (X <= 8))
边注:
许多开发人员更喜欢逻辑语句的"左侧恒定"样式,因为它会在某些容易出错的比较中导致编译错误。例如:
假设您想评估if (X == 3),但偶然输入了if (X = 3)。
后者是一个完全有效的C表达式,因为赋值操作返回True。
如果要使用"常量常量"样式:
if (3 = X)会导致编译错误,从而节省大量时间。
没有;那行不通。
-4 <= X是0或1,始终小于8。
Is the syntax in if statement valid?
语法是有效的,但是不会满足您的期望。 <=是C中的一个普通的左关联二进制中缀运算符,因此
-4 <= X <= 8
解析为
(-4 <= X) <= 8
<=的结果是一个布尔值,C表示为1 / 0,并且0 <= 8和1 <= 8均为true。
为了获得想要的效果(检查X是否在一定范围内),您需要将多个单独的比较与&&结合在一起。
Can a constant be placed before the variable in the logical condition to check the truth value?
是。您还可以比较两个变量或两个常量或几乎任何东西。
<=,
Is the syntax in if statement valid? Can a constant be placed before the variable in the logical condition to check the truth value?
不确定语法是否正确,但是在对等式不等式运算符进行测试之前放置文字常量是一种常见的做法。喜欢:
if(7==x) {...} else {...}
一些程序员确实是这样,因为如果您不小心在测试中是否等于,不相等,更大,然后是运算符时忘记了第二个'='符号,您将收到变量给文字的赋值,而不是测试,例如:
if(x=7) //danger! you're assigning to variable 'x' value of '7',
//which will return true, as a side-effect
//now (x==7)==true
同样,C语言没有" THEN"关键字,该语言的发明者认为它是多余的-很容易理解,如果经过测试后有东西,那么您可能会执行该代码。喜欢
if(SOME_MAGIC_CONST==a)
{
//There couldn't be anything else at all! else can't follow if immediately, so...
}
else {
//yep, keyword 'THEN' is redundant...
}
人们喜欢这样:出于各种原因,我个人不喜欢这样。
已更正-当然,不是每个人都这样做。 但这是一个不错的建议,可以保护自己免于愚蠢的错误
就个人而言,如果7==x更安全,我认为没有理由写x==7。