【C言語】
不要なelseを削除しよう!
(No-else-return)

return直後のelse 必要?

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 を削除すると、
単純明快な構造となった。