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

同カテゴリーの次の記事

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

この記事は、インテル® デベロッパー・ゾーンに公開されている「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” を使用しない
まとめ

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

関連記事

  • Parallel Universe マガジンParallel Universe マガジン Parallel Universe へようこそ。 米国インテル社が四半期に一度オンラインで公開しているオンラインマガジンです。インテルの技術者によるテクノロジーの解説や、最新ツールの紹介など、並列化に関する記事を毎号掲載しています。第1号からのバックナンバーを PDF 形式で用意しました、ぜひご覧ください。 12 […]
  • 比較関数の罠比較関数の罠 この記事は、インテル® デベロッパー・ゾーンに公開されている「The Evil within the Comparison Functions」の日本語参考訳です。 この記事の PDF […]
  • 並列プログラミングにおけるロックの効率的な使用並列プログラミングにおけるロックの効率的な使用 この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Using Locks Effectively in Parallel Programming […]
  • マルチスレッド開発ガイド: 4.6 インテル® Parallel Composer を利用して並列コードを開発するマルチスレッド開発ガイド: 4.6 インテル® Parallel Composer を利用して並列コードを開発する コードの並列化にはさまざまな手法があります。この記事では、インテル® Parallel Composer で利用可能な手法の概要を説明し、各手法の主な長所を比較します。インテル® Parallel Composer は Windows* 上の C/C++ を使用した開発のみを対象としていますが、これらの手法の多くは Fortran や […]
  • インテル® IPP サンプル – エラーの修正インテル® IPP サンプル – エラーの修正 この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Intel IPP Samples for Windows - error correction」の日本語参考訳です。 この記事は、PVS-Studio を使用することでプログラムがどのように安全になるかを説明した記事の 1 […]