【C言語】
strstr関数の使い方
NGワードの検索

警告:こんな変数名やコメントは駄目だ


strstr関数を使ったNGワード検索

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//日本人が書いたソースコードのレビューツール
//問題のありそうなコードを手っ取り早く見つける
//使い方:
//  $./a.out  ../*/*.c ../*/*/*.c 
//BUG:
//Japanese Programmers' Secret Stories

struct {
    const char  *word;  //駄目語
    int         point;  //点数が高いほど駄目ダメ
} 駄目語録[]={
    //駄目な変数名
    {"roop",            1000},  //誤字⇒一度もレビューを受けていない
    {"loop_counter",    200},   //局所変数に長い名前は読みにくい   
    
    //付加情報を持たない変数名
    // int 変数;
    // int 情報;
    // int データ;
    // ..等の変数名は読み手には意味が無い。
    {"var2",            10},    //”何とか2”があるという事は”何とか1”もあり      
    {"info2",           50},
    {"data2",           100},
    {"flag2",           500},
    {"tmp2",            10},        
    
    //駄目なコメント
    {"Todo",            10},    //受け入れ試験直前で残っているのはオカシイ
    {"多分",            50},    //断定してください
    {"開放",            200},   //誤字:X資源の開放⇒〇資源の解放 
    
    {NULL,              0}
};
static int 行処理(char *line){
    int point = 0 ;
    for(int i = 0; 駄目語録[i].word != NULL;i++){
        if(strstr(line,駄目語録[i].word)){
            point += 駄目語録[i].point ;
            printf("\t%4d点:%s検出:%s",駄目語録[i].point,駄目語録[i].word,line);
        }
    }
    return  point ;    
}
static int ファイル処理(char *filename){
    FILE *fp = fopen(filename,"r");
    if(fp == NULL){
        perror(NULL);
        exit(1);
    }
    int point = 0;
    char    buf[BUFSIZ];
    while(fgets(buf,BUFSIZ,fp) != NULL){
        point += 行処理(buf);
    }
    fclose(fp);
    return  point ;
}
int main(int argc,char *argv[]){
    if(argc < 2){
        printf("Usage:./a.out f1.c f2.c ....\n");
        exit(1);
    }
    for(int i = 1;i < argc;i++){
        printf("+%-40s:解析開始\n",argv[i]);

        int point = ファイル処理(argv[i]);
        if(point){
            printf("%d 合計点 : %s\n",point,argv[i]);
        }
    }
}

Japanese Programmers’ Secret Stories

駄目語録[]の単語は開発環境で異なります。
ご自身の環境に応じて追加削除してください。