■この記事の概要
C言語におけるcontinue文の使用と非使用を比較し、コードの可読性やメンテナンス性の違いを解説します。
この記事は、MISRA-C基準でのcontinue使用の歴史と、現代のC言語での推奨パターンを初心者向けに紹介します。
■continueを禁止して深いネストにした場合(非推奨)
#include <stdio.h>
#include <stdlib.h>
int main(void){
char *input = "/usr/include/stdio.h";
FILE *fp = fopen(input,"r");
if(fp == NULL){
perror(NULL);
exit(-1);
}
char buf[BUFSIZ];
while(fgets(buf,BUFSIZ,fp) != NULL){
if(buf[0] != '\n'){
if(buf[0] != '#'){
if(buf[0] != '/'){
printf("%s",buf);//メイン処理
}
else
{
;//何もしない
}
}
else
{
;//何もしない
}
}
else
{
;//何もしない
}
}
fclose(fp);
}
古いMISRA-Cルールはcontinueを禁止していたので
メイン処理がネストの深い所に記述されていました。
ネストが深いのでこのルールを守るとコードが
読みづらくなります。
■continueを使って浅いネストにした場合(推奨)
#include <stdio.h>
#include <stdlib.h>
int main(void){
char *input = "/usr/include/stdio.h";
FILE *fp = fopen(input,"r");
if(fp == NULL){
perror(NULL);
exit(-1);
}
char buf[BUFSIZ];
while(fgets(buf,BUFSIZ,fp) != NULL){
if(buf[0] == '\n'){
continue ;
}
if(buf[0] == '#'){
continue ;
}
if(buf[0] == '/'){
continue ;
}
printf("%s",buf);//メイン処理
}
fclose(fp);
}
幸いな事にMISRA-Cのcontinue 禁止は廃案になったので
今はcontinueを禁止するメジャールールはありません。
continueを使うとメイン処理を
深いネストの所ではなく
下に書けます。
つまりプログラムの流れを上から下へ書く事ができるので
読みやすくなります。