我用“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/