
No.6ベストアンサー
- 回答日時:
前にも書いたようにdo-whileを禁止する理由はどう考えても見当たりません。
逆に規約の有無に関わらず、問答無用で禁止なのは、振る舞いが未定義や不定になるものです。処理系定義のものは(なるべく避けるべきですが)状況次第では許容されるでしょう。
動作が未定義になるもので、意外にやってしまいがちなのは、
・空でないソースの最後が改行で終わっていない(ISO/IEC 9899:1999 5.1.1.2)
・下線で始まるマクロを定義してしまう(同 7.1.3)
といったものがあります。
後は、なるべく一貫性のあるコーディングをすることが大切ですね。書式だけでなく、命名方法まで含めて。
御回答ありがとうございます。
未定義や不定動作、確かに問題ですね。
gotoが禁止される理由は可読性だけではないと感じました。
御指摘の2点、後学の参考にさせて頂きます。
どうもありがとうございました。
No.8
- 回答日時:
ループの中に入るときに、処理するパラメータが不定のままの可能性があるならばよろしくないでしょうね。
かならず一回はループしてしまうわけですから。
可読性よりも重要かと。
私の場合は、ループに入る前に例外を除外してから処理するようにしてます。そのほうがループ内の処理が短縮できるから。だって、for/whileだろうが余計なif文が100万回(例えばね)ループすると思うといやです。
御回答ありがとうございます。
確かに、通常のフローよりもループの方が不定パラメータの問題は大きそうですね。
それを一々ソースの中でチェックする手間が余計だという観点で
禁止されているのかもしれません。
頂いた御意見を参考に、自分なりにもう少し考えてみようと思います。
どうもありがとうございました。
No.5
- 回答日時:
Do-whileは禁止しなくてもいいとおもうけど・・・
もちろん、流れ的にwhileが適当なら無理にdo-whileを
使う必要は無いと思いますが・・・
あと、盲目的に禁止してしまうのがgotoですが、
なぜ禁止かというと、プログラムの流れが複雑になる。
というのが大方の理由かと思います。
まぁ、たいてい有無を言わさず禁止するでしょうけど。
しかし、私は流れを簡略化するgotoはOKな考えで、
多重にネストが掛かった最内から、一番外のネストからの脱出のみ使用可としています。
条件分岐使ってbreakの繰り返しは見るのもいやなんで・・・
でも、一度もそんなコードになったことは無いですが(笑
いずれにせよ、流れが読みやすいのであれば、問題は無いはずです。
ただ、プロジェクト自体の規約があるので、なんでもかんでもといのは無理でしょうけど。
御回答ありがとうございます。
私は多重ネストからのbreakは苦にしないのですが、
確かにあまり見栄えの良いものではありませんね。
gotoに関しては、例外処理でたまにお世話になるかな、という程度のことは考えていました。
以前読んだ解説書にも、例外処理ならばgotoが適当な場面があると解説されていましたので…
No.4
- 回答日時:
コーディング規約とはローカルなもので、そのプロジェクトのリーダーさんが決めるわけですから、従わなければなりません。
理由はリーダーさんに聞くべきです。もっとも、コーディング規約というものは、見直しもされずに機械的にコピーが配布される悪い面があり、正しくはプロジェクトごとに規約の一つ一つを見直してから修正を加えて配布すべきです。
一般には使用を禁止する筋合いのものではなく、規約に載っていなくても、禁止すべきは"goto"文でしょう。
御回答ありがとうございます。
私もリーダーに問い合わせてみたのですが、
以前のプロジェクトからそのまま引っ張ってきた規約らしく、
本人もよく理由が分かっていないようでした。
gotoのような一方通行の制御については、
直感的に「やらないほうがいい」と理解できるのですが、
do-whileは別に一方通行でもなんでもありませんよね…
No.3
- 回答日時:
No.2のTT414です
>No.1の方に賛成です。
>do
「do」以下の文章の文章は「No.1の方に賛成です。」の文章の説明ではありません、「No.1の方に賛成です。」の内容とは別の意味の追加意見です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PIC のプログラムについて ど...
-
For文の終了値を関数にしても問...
-
ループを途中で抜けたいのですが。
-
最早開始時間と最遅完了時刻を...
-
【C++】関数ポインタの使い方
-
既定のコンストラクタがありま...
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
a^2の√=a が成り立たない場合
-
VB6.0での小数点の扱いについて
-
配列をnビットシフトする
-
数学 一次関数 関数 y=-3/4x+k(...
-
c languageで 簡単な質問があ...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
プログラムでの数字につく”f”の...
-
C言語で複数列のデータを1列の...
-
c言語で、繰り返し文の中で、0....
-
sscanfとscanfの違いがよくわか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループを途中で抜けたいのですが。
-
do-while文が禁止される理由
-
PAD図の書き方
-
入力した文字列から母音だけを...
-
入力した数値を倍々するプログラム
-
if文の中にfor文なのか、for文...
-
C言語forループが完結した場合...
-
アルゴリズムです!四つの数字...
-
break文でループを一気に抜ける...
-
エクセルVBAで Do While (1)って?
-
モンテカルロシミュレーション...
-
このC#プログラムの1〜11を埋め...
-
プログラミングC言語についての...
-
C++ DirectX カーソルの移動処...
-
HEWのバグ?
-
ゲームオーバーのプログラム
-
プログラムで関数は使わない方...
-
Delphiで・・・
-
他言語で言うcontinue文
-
Excel VBAで年度をまたぐ期間の...
おすすめ情報