C b=假vs如果(b)b=假
我正在处理C b=假vs如果(b)b=假,c,if-statement,boolean,switch-statement,case,C,If Statement,Boolean,Switch Statement,Case,我正在处理test.c文件,并试图计算其中的单行注释 当我发现两个连续的/字符时,我将slc触发器设置为true 当我到达行尾时,我需要将slc触发器设置为false switch (character) { case '\n': if (slc) slc = false; // single-line comment ended break; 当然,\n字符清楚地表示单行注释的结尾 switch (character) { case '\n':
test.c
文件,并试图计算其中的单行注释
当我发现两个连续的/
字符时,我将slc
触发器设置为true
当我到达行尾时,我需要将slc
触发器设置为false
switch (character)
{
case '\n':
if (slc) slc = false; // single-line comment ended
break;
当然,\n
字符清楚地表示单行注释的结尾
switch (character)
{
case '\n':
slc = false; // single-line comment ended
break;
但是当找到\n
字符时,slc
可以是true
或false
switch (character)
{
case '\n':
if (slc) slc = false; // single-line comment ended
break;
这两个代码块之间有什么区别吗
我应该怎么写?使用第一种形式。添加一个额外的
if
检查,它不影响代码的功能,只影响代码的可读性,这是不好的做法。您应该始终以最简洁的方式编写代码,以免混淆代码的意图。因为在这种情况下,您的意图总是让变量为false
,只需设置slc=false
最上面的一个就行了,为什么还要麻烦如果第一个代码是,您应该更改注释,//这里没有单行注释
之类的内容,因为换行不需要结束一个。唯一的区别是,如果关闭优化器,后者将生成更多的代码。。。行为将是相同的。这不是很明显吗slc
在语句末尾必然为false。@JimBalter对我来说不太明显。我不确定计算机的操作更容易:将一些新的值赋值给变量,或者检查一些条件。这些都不是编写代码时应该考虑的事情。微优化是一种非常好的方法,可以生成速度极快、无法维护、bug严重的代码。让编译器来完成这项工作;将优化重点放在您使用的算法上。在探查器告诉你需要优化之前,千万不要优化。我问你行为是否相同,但你回答说什么“对计算机来说更容易”,这是一个不同的主题。还有一个奇怪的说法。。。如果你的意思是“哪个操作更快”,那么就这么说吧。事实上,在现代计算机上,仅仅做作业的速度要快得多;难以捉摸的树枝很烂,谢谢!事实上,这只是一个有趣的问题,电脑会有什么不同吗。编译器会添加一个条件来检查变量状态吗?如果您想绝对确定,请用两种方法编写它,然后反汇编二进制文件,看看编译器会做什么。我怀疑它会优化检查,除非禁用优化。检查slc
的值至少需要几个时钟周期,另外,如果随意使用jmp
指令,则线程预测和流水线处理可能会比较困难;无需拆卸。有了优化(例如-O2),这两种方法将完全相同。@EdwardRuchevits“计算机会有什么不同吗”--什么样的不同?行为将是相同的。“编译器会添加一个条件来检查变量状态吗?”--如果slc
被声明为volatile
,则肯定会这样做。否则,它可能会,也可能不会,即使你告诉它。
switch (character)
{
case '\n':
if (slc) slc = false; // single-line comment ended
break;