关于Misra C Code Stadard的问题
Misra C的C语言编码标准里面有一条,
“Rule14.5(Required): The continue statement shall not be used.”
谁能告诉我为什么?因为本人最近要给项目组将编码规范,有些想自己搞清楚。 C 编码 标准
[解决办法]
continue语句不要用的原因:
1)对于continue来说,本来好好的循环的结构会被打破,这对cpu预取指令以及cpu流水线会产生较大的影响,会打破流水线的执行,影响性能。特别是循环结构中continue的应用对性能影响较大。
2)代码不好理解,对后续维护处理不便,特别是在循环结构中增加一些处理,就要考虑很多情况。
不过话说回来了,事情没有绝对的,只要看看linux内核里面有很多continue语句就知道了。
[解决办法]
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
whlie (!feof(f)) {
a=fgetc(f);
//...
b=fgetc(f);//可能此时已经feof了!
//...
}
而这样写就没有问题:
whlie (1) {
a=fgetc(f);
if (feof(f)) break;
//...
b=fgetc(f);
if (feof(f)) break;
//...
}
类似的例子还可以举很多。