2016-12-03 58 views
0

我開始使用Gcov來分析我的C程序。所以我在GCOV文檔的介紹中讀到: 「因爲gcov按行(以最低分辨率)累計統計數據,所以它最適合使用每行僅放置一條語句的編程風格。」 GCov Documentation如何避免GCov對編碼風格的限制?

寫了一些簡單的程序,我注意到在執行包含在「for」子句中的語句的計算次數的問題。

我要告訴你兩個例子,以及這些的gcov輸出,:

-: 0:Source:example1.c 
    -: 0:Graph:example1.gcno 
    -: 0:Data:example1.gcda 
    -: 0:Runs:1 
    -: 0:Programs:1 
    -: 1:#include <stdio.h> 
    -: 2:#include <stdlib.h> 
    -: 3: 
    -: 4: 
    1: 5:int main() 
    -: 6:{ 
    1: 7: int i = 0; 
    -: 8: 
    1: 9: for(; i < 4; i++); 
    -: 10: 
    1: 11: return 0; 
    -: 12:} 
    -: 13: 

gcov的計數的條款作爲一個獨特的元素。這沒有錯?正如文檔的gcov告訴計數的時間,如果我在這個例子中把這些放在一個線,如在條款的語句執行的正確數量:

-: 0:Source:example1.c 
    -: 0:Graph:example1.gcno 
    -: 0:Data:example1.gcda 
    -: 0:Runs:1 
    -: 0:Programs:1 
    -: 1: 
    -: 2:#include <stdio.h> 
    -: 3:#include <stdlib.h> 
    -: 4: 
    -: 5: 
    1: 6:int main() 
    -: 7:{ 
    1: 8: int i = 0; 
    -: 9: 
    6: 10: for(; 
    -: 11:  i < 4; 
    4: 12:  i++); 
    -: 13: 
    1: 14: return 0; 
    -: 15:} 
    -: 16: 

我們是(i = 0)被執行1時間,(i < 4)5次和(i ++)4次。這對我來說是正確的。

我有兩個問題:

1 - 我不希望我的適應編碼風格,以做gcov的統計數據。是否有許多工具或標誌以正確的格式轉換我的代碼以獲得GCov的正確統計信息?

2-是否還有其他構造具有「for」循環的相同問題?

在此先感謝您的答案。

回答

0

這裏使用的編碼風格沒有什麼不對。
gcov帶註釋的輸出將其顯示爲執行一次,因爲它已由編譯器優化,因爲編譯器在for的末尾看到;它將其轉換爲單個分配。所以,而不是在5個步驟中遍歷循環,它只是分配值並從中取出。
你應該嘗試同樣的事情是這樣的:

int i=0; 
for(; i < 4; i++) 
    printf("%d", i) 

如果嘗試這一個,你會得到執行權數爲每個語句。
所以我不需要修改任何特定的編碼約定,但是避免在一個單獨的(實際上沒有專業人士)編寫語句組。

+1

對不起,延遲迴復。但我還沒有確信。 GCov計算你寫的「for」作爲唯一的陳述。我從分析中收到5個。 – vnzstc