
■駄目語(grep -f NGワード相当)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//ソースコードの受け入れ試験で
//問題のありそうなコードを
//手っ取り早く見つける
//使い方:
// $./a.out ../*/*.c ../*/*/*.c |sort -n
static char *駄目語録[]={
"Todo", //お前が今修正しろ
"roop", //誤字⇒一度もレビューを受けていない
"開放", //誤字⇒解放
"loop_counter", //局所変数に長い名前
"かも", //断定してください
"さん", //個人名
"様から", //個人名
"多分", //断定してください
"予定", //予定は未定
"処理を抜ける", //break
"処理なし", //なら書くな
"何もしない",//なら書くな
")NULL", //(キャスト)NULL
")\"", //キャスト"文字列
&__DATE__[7], //今年作ったばかり
"else", //No-else-return
NULL
};
static int 行処理(char *line){
int 駄目 = 0 ;
for(int i = 0; 駄目語録[i] != NULL;i++){
if(strstr(line,駄目語録[i])){
駄目++ ;
}
}
return 駄目 ;
}
static int ファイル処理(char *filename){
FILE *fp = fopen(filename,"re");
if(fp == NULL){
perror(NULL);
exit(1);
}
int 評価点 = 0;
char buf[BUFSIZ];
while(fgets(buf,BUFSIZ,fp) != NULL){
評価点 += 行処理(buf);
}
fclose(fp);
return 評価点 ;
}
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++){
int 評価点 = ファイル処理(argv[i]);
if(評価点){
printf("%d点 : %s\n",評価点,argv[i]);
}
}
}
駄目語録[]の単語は開発環境で異なります。
ご自身の環境に応じて追加削除してください。