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 b=假vs如果(b)b=假_C_If Statement_Boolean_Switch Statement_Case - Fatal编程技术网

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;