c - (a && b) 语句中有多少个分支?根据 gcov : 4

标签 c gcc code-coverage gcov

我用“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 正确报告 2 个分支中的 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 指令将转换为单个分支。

关于c - (a && b) 语句中有多少个分支?根据 gcov : 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11284508/

相关文章:

c - 如何用_mm_clflushopt函数编译程序?错误 : inlining failed

c++ - CMake 发现错误的 gcc 版本

java - 在保持测试可比性时需要忽略 JaCoCo 的 Lombok 生成代码 - 怎么办?

mockito - PowerMockito禁用 Sonar 分公司的覆盖范围

mysql - C 中的函数返回 MYSQL_RES

c# - 在 C# 代码中导入 DLL 函数

c - 为什么 scanf 不让字符恢复失败?

c - pow 函数的奇怪行为

python - 为什么 python.org OS X 安装程序是用 gcc-4.0 构建的?

phpunit - 如何将 PHPUnit 中代码覆盖率的切换点百分比从 90% 更改为 75%?