C
C++
Linux
Ubuntu
SLOC

Source lines of code(SLOC)を数える

More than 1 year has passed since last update.

はじめに

ソースコード行数;Source lines of code(SLOC)を数える方法を紹介します。
busyboxのソースコードを例にしてSLOCを計測してみます。
PC OSは Ubuntu 14.04です。

cloc

clocをinstallします。clocはPerl script fileです。

console
sudo apt-get install cloc

busybox-1.26.2を解析します。次のような結果になりました。

console
$ cloc busybox-1.26.2
    2056 text files.
    1657 unique files.                                          
    1145 files ignored.

http://cloc.sourceforge.net v 1.60  T=17.35 s (50.8 files/s, 15274.9 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C                               631          24595          53365         158590
Bourne Shell                    163           1317           1278           7419
C/C++ Header                     60           1155           2176           5370
HTML                              9            420             32           3934
C++                               1            166             62           1197
make                              5            306            441            900
yacc                              1             93             20            570
Perl                              3             97            166            315
lex                               1             40             12            303
NAnt scripts                      1             84              0            260
Bourne Again Shell                4             47             86            203
IDL                               1              0              0             33
awk                               1              2              8             30
--------------------------------------------------------------------------------
SUM:                            881          28322          57646         179124
--------------------------------------------------------------------------------

言語別の集計になります。ファイル数、空白、コメント、コード別に行数が集計されています。

"--by-file" option の結果です。

console
$ cloc --by-file busybox-1.26.2
    2056 text files.
    1657 unique files.                                          
    1145 files ignored.

http://cloc.sourceforge.net v 1.60  T=16.65 s (52.9 files/s, 15924.0 lines/s)
----------------------------------------------------------------------------------------------------------------------
File                                                                               blank        comment           code
----------------------------------------------------------------------------------------------------------------------
busybox-1.26.2/shell/ash.c                                                          1153           1969          10476
(...)
busybox-1.26.2/arch/i386/Makefile                                                      1              5              1
----------------------------------------------------------------------------------------------------------------------
SUM:                                                                               28322          57646         179124
----------------------------------------------------------------------------------------------------------------------

"--diff" optionの実行結果です。

console
$ cloc --diff busybox-1.26.2 busybox-1.27.2
    2056 text files.
    2101 text files.s
    2303 files ignored.                                         

http://cloc.sourceforge.net v 1.60  T=101.38 s (0.0 files/s, 0.0 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
(...)
C++
 same                             1              0             62           1197
 modified                         0              0              0              0
 added                            0              0              0              0
 removed                          0              0              0              0
(...)
C/C++ Header
 same                            52              0           2162           5316
 modified                         8              0              5             33
 added                            5            169            298            673
 removed                          0              0              9             21
(...)
C
 same                           389              0          51434         155066
 modified                       227              0            574           1237
 added                           38           1305           3978           8354
 removed                         15            295           1357           2287
-------------------------------------------------------------------------------
SUM:
 same                           609              0          55690         175471
 modified                       256              0            586           1306
 added                           48           1515           4322           9190
 removed                         16            301           1370           2347
-------------------------------------------------------------------------------

sample

ソースコード例を使ってclocの動作を確認します。

test.c
  1 #if 0
  2 const int rodata = 10;
  3 int data = 20;
  4 int bss = 0;
  5 #endif
  6 
  7 /*-
  8  * main function
  9  */
 10 int main(int argc, char* argv[])
 11 {
 12     return 0; /* no count comment */
 13 }
 14 
console
$ cloc test.c
       1 text file.
       1 unique file.                              
       0 files ignored.

http://cloc.sourceforge.net v 1.60  T=0.02 s (60.8 files/s, 850.7 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                                1              2              3              9
-------------------------------------------------------------------------------
$ cloc test.c
       1 text file.
       1 unique file.                              
       0 files ignored.

http://cloc.sourceforge.net v 1.60  T=0.02 s (57.8 files/s, 808.7 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                                1              2              3              9
-------------------------------------------------------------------------------

codeは9です。
コメントだけの行、空白はカウントされません。
プリプロセッサ命令はカウントされます。
#if 0はカウントされます。