C言語にて以下の様に、if文での中括弧省略や
否定演算子の使用を禁止する文献・コーディング規約等ございましたら
ご教示ください。
if (!strcmp(x, y)
return -1;
可読性が低下する為、色々な企業のコーディング規約にて
上記の様な文法は禁止されている事がありますが、
GNU等の万国共通(?)な文献での、使用禁止・使用を控える旨、
記載されているものがございましたらご教示下さりますようお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
ベストアンサー
適当に主なコーディング規約を確認してみました。
コーディング規約 | 波括弧省略 | !使用 |
---|---|---|
Linux kernel coding style | ◎(if-elseで片方だけは×) | ● |
Google C++ Style Guide | ○(if-elseで片方だけは×) | ● |
GNU Coding Standards | ●(入れ子の親は×) | - |
LLVM Coding Standards | ● | ● |
C++コーディング規約 [Robotics with Linux] | × | - |
凡例:
◎推奨
○可
△非推奨
×禁止
-記述無し
●明示されていないが、例文で使用されている
その他のコーディング規約は最後のRoboticsのサイトにリンクがあるので参考にしてみてください。
主たるほとんどのコーディング規約では、一行の場合の波括弧({}
)省略を完全には禁止していないようです。ただ、if-elseで片方だけ付けるとかは禁止している場合もあります。Linux kernel coding styleは聖典K&Rになるべく忠実になるようにしています(そう、K&Rが正しいのです)。
!
については、strcmp()
特有の話だと思われます。(実際はint
ですが)真偽値を返すと期待されるような関数(isalpha()
など)や失敗時にNULL
や成功または失敗時に0
を返す関数(malloc()
など)において、!
を使うことはおかしくも何もありません。しかし、strcmp()
が返すのは真偽値ではありません。この関数は小さい時、同じ時、大きいときにそれぞれ-1, 0, 1を返します。!strcmp(a, b)
はaとbが同じ時に真となりますが、ぱっと見どちらなのかわかりにくいです。それよりもstrcmp(a, b) == 0
の方が、strcmpが0になるとき、つまり、同じ時に真であると理解しやすいと考えられています。
なお、これらはC/C++特有であることに注意してください。例えば、JavaでのifではCode Conventions for the Java Programming LanguageでもGoogle Java Style Guideでも波括弧は省略すべきでは無いとされています。また、PerlやGoのようにそもそも省略できない言語も存在します。
投稿2017/08/07 06:54
編集2017/08/07 07:05総合スコア21751
0
否定演算子を禁止するのはちょっとわかりかねますが(==0 で比較しろ、ということですかね)、中括弧省略禁止は、あとで無用なバグを生まないためにはありかなとは思います。
が、程度問題です。その方が分かりやすくなるなら、プロジェクトのルールとして禁止しているのでない限り使うべきでしょうね。
そもそも C のほぼオフィシャルなコーディングスタイル自体、初版(K&R 版)と ANSI 対応とで異なってるわけですし……
投稿2017/08/07 05:34
総合スコア13707
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
C言語でのコーディング規約は、どれだけ有名な団体が制定したものであろうが、それはあくまでローカルルールでしかありません(むろん、プロジェクトで採用されているルールがあればそれに従うことになります)。
「共通で禁止されているもの」は、文法上書けないもの(当然、正しく動作させることはできません)あるいは未定義の動作を起こすもの(明文では禁止ではありませんが、環境依存で特殊な効果を狙う場合を除けば、正常に動く保証もないコードになります)程度しかありません。Pythonのように、インデントも文法に組み込まれていれば、必然的に「その通りに書く」こととなります。
逆に、IOCCCのような、どれだけ奇抜なC言語のコードを書けるか競う大会もあります。
投稿2017/08/07 05:25
総合スコア146571
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。