warning: do not use ‘else’ after ‘return’
警告:return直後のelseは要らない
[readability-else-after-return]
■elseが好き(非推奨)
#include <stdio.h>
#include <string.h>
#include <assert.h>
//行頭にマークを追加
char *addid(int mark,char *line){
static char buf[BUFSIZ];
sprintf(buf,"\t%c:\t%s",mark,line);
return buf;
}
//elseが好き
char *NG(char *line){
if (strchr(line, '+')){
return addid('+',line);
}
else
{
if (strchr(line, '-')){
return addid('-',line);
}
else
{
if (strchr(line, '*')){
return addid('*',line);
}
else
{
if (strchr(line, '/')){
return addid('/',line);
}
else
{
if (strchr(line, '#')){
return addid('#',line);
}
else
{
return addid('?',line);
}
}
}
}
}
}
int main(void){
char *input = "/usr/include/stdio.h";
FILE *fp = fopen(input,"r");
char buf[BUFSIZ];
while(fgets(buf,BUFSIZ,fp) != NULL){
char *ng = NG(buf);
printf("%s",ng);
}
fclose(fp);
}
ぱっと見、何やってるか分からない。
■elseが嫌い(推奨)
#include <stdio.h>
#include <string.h>
#include <assert.h>
//行頭にマークを追加
char *addid(int mark,char *line){
static char buf[BUFSIZ];
sprintf(buf,"\t%c:\t%s",mark,line);
return buf ;
}
// else が嫌い
char *OK(char *line){
if (strchr(line, '+'))
return addid('+',line);
if (strchr(line, '-'))
return addid('-',line);
if (strchr(line, '*'))
return addid('*',line);
if (strchr(line, '/'))
return addid('/',line);
if (strchr(line, '#'))
return addid('#',line);
return addid('?',line);
}
int main(void){
char *input = "/usr/include/stdio.h";
FILE *fp = fopen(input,"r");
char buf[BUFSIZ];
while(fgets(buf,BUFSIZ,fp) != NULL){
char *ok = OK(buf);
printf("%s",ok);
}
fclose(fp);
}
不要な else を削除すると、
単純明快な構造となった。