【发布时间】:2012-11-10 22:26:56
【问题描述】:
我正在处理 test.c 文件并尝试计算其中的单行 cmets。
当我发现两个连续的/ 字符时,我将slc 触发器设置为true。
当我到达行尾时,我需要将slc触发器设置为false。
当然\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;
这两个代码块有什么区别吗?
我应该怎么写?
【问题讨论】:
-
对于第一个代码,您应该更改注释,
// no single-line comment from here或其他内容,因为换行符不需要结束。 -
唯一的区别是,如果你关闭优化器,后者会生成更多的代码......行为将是相同的。这不是很明显吗?
slc在语句末尾必然为假。 -
@JimBalter 对我来说不是那么明显。我不确定哪种操作对计算机来说更容易:为变量分配一些新值,或者检查一些条件。
-
这些都不是您在编写代码时应该考虑的事情。微优化是制作极快、极难维护、漏洞百出的代码的绝妙方法。让编译器完成工作;将优化重点放在您使用的算法上。在分析器告诉您需要以及在何处进行优化之前,切勿进行优化。
-
我问行为是否相同是否不明显,但您回答“对计算机更容易”,这是一个不同的主题。这也很奇怪……如果您的意思是“哪个操作更快”,那么就这么说吧。事实是,在现代计算机上只做作业要快得多。不可预测的分支很烂。
标签: c if-statement boolean switch-statement case