プログラミング、リファクタリング、そしてすべてにおける究極の疑問

その他インテル® DPC++/C++ コンパイラー特集

この記事は、インテル® デベロッパー・ゾーンに公開されている「The Ultimate Question of Programming, Refactoring, and Everything」の日本語参考訳です。


この記事では、プログラマーがエラーを回避し、時間と労力を節約するのに役立つ C++ コーディングに関する 42 の推奨事項を紹介します。著者の Andrey Karpov 氏は、静的コード解析ツールである PVS-Studio の「プログラム検証システム」開発チームを率いるテクニカル・ディレクターとして、多数のオープンソース・プロジェクトの検証を通して、問題となる多種多様なコーディング手法を見てきました。ここでは、その知識と経験を皆さんと共有します。すべての推奨事項には実例が示されます。これらの推奨事項は C/C++ プログラマーを対象としていますが、多くは一般的なものであり、ほかの言語のプログラマーにも役立つでしょう。

目次

はじめに

  1. コンパイラーの仕事をしない
  2. 0 よりも大きいは 1 を意味しない
  3. コピーは 1 回、チェックは2 回
  4. ?: 演算子に注意して、括弧で囲む
  5. 利用可能なツールを使用してコードを解析する
  6. ポインターを明示的に整数型へキャストしているすべてのコードを確認する
  7. ループ内で alloca() 関数を呼び出さない
  8. デストラクター内の例外は危険
  9. 終端 null 文字には ‘\0’ を使用する
  10. 複数の小さな #ifdef ブロックの使用は避ける
  11. 1 行にできるだけ多くの操作を詰め込もうとしない
  12. コピー & ペーストを使用する場合は特に最後の行に注意する
  13. 表形式を使用する
  14. 優れたコンパイラーとコーディング手法でも対応できない場合がある
  15. コードではできるだけ enum class を使用する
  16. 能力の誇示はプログラミングでは容認されない
  17. プライベート・データのクリアには専用の関数を使用する
  18. ある言語の知識は必ずしも別の言語に適用できるとは限らない
  19. あるコンストラクターを別のコンストラクターから適切に呼び出す方法
  20. ファイルの終わり (EOF) チェックだけでは不十分な場合がある
  21. ファイル終了文字 (EOF) に正しく到達したかチェックする
  22. #pragma warning(default:X) を使用しない
  23. 文字列リテラルの長さを自動的に評価する
  24. override 指定子と final 指定子を使用する
  25. ‘this’ を nullptr と比較しない
  26. 油断のならない VARIANT_BOOL
  27. 狡猾な BSTR 文字列
  28. 単純な関数を使用できる場合マクロは使用しない
  29. イテレーターでは後置インクリメント演算子 (i++) の代わりに前置インクリメント演算子(++i) を使用する
  30. Visual C++* と wprintf() 関数
  31. C および C++ では配列は値渡しされない
  32. 危険な printf
  33. null ポインターは逆参照しない
  34. 未定義の動作は考えているよりも身近なもの
  35. enum へ新しい定数を追加する際は switch 演算子も修正する
  36. PC の動作が不安定な場合はメモリーをチェックする
  37. do {…} while (…) 内の ‘continue’ 演算子に注意する
  38. 今後は NULL の代わりに nullptr を使用する
  39. 不正なコードが動作する理由
  40. 静的コード解析を使用する
  41. プロジェクトに新しいライブラリーを追加しない
  42. 関数名に “empty” を使用しない

まとめ

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

タイトルとURLをコピーしました