2

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

int main() {
  int a = 1;
  int b = 1;
  a && b;
}

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

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

1 回答 1

2

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

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

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

于 2012-07-01T18:19:02.447 回答