Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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
(a&;b)报表中有多少分支机构?根据gcov:4_C_Gcc_Code Coverage_Gcov - Fatal编程技术网

(a&;b)报表中有多少分支机构?根据gcov:4

(a&;b)报表中有多少分支机构?根据gcov:4,c,gcc,code-coverage,gcov,C,Gcc,Code Coverage,Gcov,我使用“gcc-fprofile arcs-ftest coverage test.c”编译了以下程序: 运行程序后,调用“gcov-bc test.c”报告至少执行了一次4个分支中的50%。为什么gcov说该计划有四个分支,而不是两个?在运行以下程序后,gcov正确地报告两个分支中的50%至少执行了一次: int main() { int a = 1; if (a) a = 0; else a = 1; } 显然,gcov正在考虑a&b如下: if(a) { //

我使用“gcc-fprofile arcs-ftest coverage test.c”编译了以下程序:

运行程序后,调用“gcov-bc test.c”报告至少执行了一次4个分支中的50%。为什么gcov说该计划有四个分支,而不是两个?在运行以下程序后,gcov正确地报告两个分支中的50%至少执行了一次:

int main() {
  int a = 1;
  if (a)
    a = 0;
  else
    a = 1;
}

显然,
gcov
正在考虑
a&b
如下:

if(a) { // branch 1
    if(b) { // branch 2
        1; 
    } else { // branch 3
        0;
    }
} else { // branch 4
    0;
}

虽然我相当确定实际的CPU指令将转换为单个分支。

是的,实际的汇编程序输出只包含一个条件分支。为什么gcov选择以这种方式解释短路运算符的分支覆盖率,我并不清楚。将其解释为“if(a){result=b;}else{result=0;}”对我来说似乎更合理(result表示a&&b的结果)。@HermannSpeiche:这是错误的。
a和&b
的结果是0或1,而不是0或
b
if(a) { // branch 1
    if(b) { // branch 2
        1; 
    } else { // branch 3
        0;
    }
} else { // branch 4
    0;
}