C++ アプリケーションでの厳密な型チェックの使用

提供: RAD Studio
移動先: 案内検索

C++ の仕様:インデックス への移動


新しい C++ アプリケーションのデフォルトの型チェック方式は STRICT で、あたかも #define STRICT を設定したかのようになっています(これは、32 ビット Windows アプリケーションに加え、64 ビット Windows アプリケーションにも適用されます)。C++Builder 2007 より前のバージョンで作成されたアプリケーションでは、以前のデフォルトである #define NO_STRICT をまだ使用しています。VCL では、Windows ハンドル パラメータを C++ の STRICT マングル方式に一致するように変換できるようになり、STRICT モードでコンパイルすると、型安全性が強化され、VCL のネイティブ マングル処理にも一致するという利点があります。

NO_STRICT が定義されたコードの移行

NO_STRICT を定義しているアプリケーションをアップグレードして、STRICT モードでコンパイルされるようにすることをお勧めします(まず最初に、このトピックで説明しているように、NO_STRICT 条件定義を削除します)。ただし、VCL には NO_STRICT を定義しているアプリケーション用のエントリ ポイントがまだ用意されており、コードを STRICT モードでコンパイルしない場合は、引き続き NO_STRICT を使用できます。とは言え、これは今後変わる可能性があることを知っておいてください。

  • 厳密な(STRICT)型チェックの詳細については、Microsoft Windows Platform SDK ヘルプの[Using the Windows Headers|STRICT Type Checking]http://msdn.microsoft.com/en-us/library/aa383732(v=vs.85).aspx)を参照してください。
  • システムへの Microsoft SDK ヘルプのインストールについては、EDN で公開されている製品の Install.html ファイル(http://edn.embarcadero.com/article/40774)の「オンライン ヘルプのインストール」を参照してください。

アプリケーションで NO_STRICT が使用されているかどうかを知る方法

NO_STRICT が定義されているコード プロジェクトを手っ取り早く見つけるには、*.cbproj ファイルで NO_STRICT を検索します。

メモ: C++Builder プロジェクト ファイル(.cbproj ファイル)は、コード エディタでは表示も編集もできず、別のエディタで変更してもいけませんが、別のエディタや検索ユーティリティを使って .cbproj ファイル内を検索することはできます。たとえば、GREP を使用することができます。

特定のプロジェクトについては、以下の手順のとおり、IDE を使用して NO_STRICT マクロを削除できます。

NO_STRICT 条件定義の削除

  1. NO_STRICT が定義されているプロジェクトを開きます。
  2. [プロジェクト|オプション...|C++ (共有オプション)([<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスの一番上のページ)を選択します。
  3. ページの最上部にある[ビルド構成]フィールドで、STRICT 条件定義を使用する構成([Base]構成など)を選択します。

    メモ: [条件定義]フィールドに[継承]および["<構成名>" からの値]のサブフィールドが含まれている場合は、[ビルド構成]フィールドで名前付きの親構成(<構成名> に示されるもの)を選択する必要があります。

  4. [条件定義]フィールドで、「NO_STRICT」を強調表示し削除します。
  5. [条件定義]ダイアログ ボックスで[OK]をクリックします。
  6. [<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスで[OK]をクリックします。
  7. プロジェクトを再ビルドし、(特に、Windows 手続きの呼び出しで)型チェックの結果エラーが表示される場合は、それらを修正します。

STRICT 条件定義の追加(省略可能)

STRICT がデフォルトであるため、NO_STRICT 条件定義の削除は STRICT 条件定義の設定と同等です。ただし、以下の手順に従って STRICT 条件定義を明示的に追加することもできます。

  1. [プロジェクト|オプション...|C++ (共有オプション)([<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスの一番上のページ)を選択します。
  2. ページの最上部にある[ビルド構成]フィールドで、STRICT 条件定義を使用する構成([Base]構成など)を選択します。

    メモ: [条件定義]フィールドに[継承]および["<構成名>" からの値]のサブフィールドが含まれている場合は、[ビルド構成]フィールドで名前付きの親構成(<構成名> に示されるもの)を選択する必要があります。

  3. [条件定義]フィールドで、参照ボタン([...])をクリックします。
  4. [条件定義]ダイアログ ボックスで、テキスト入力フィールドに「STRICT」と入力し、[追加]をクリックします。
  5. [条件定義]ダイアログ ボックスで[OK]をクリックします。
  6. [<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスで[OK]をクリックします。
  7. プロジェクトを再ビルドし、(特に、Windows 手続きの呼び出しで)型チェックの結果エラーが表示される場合は、それらを修正します。

Windows の以前の型を使用した場合の型チェック上の問題点

Windows 3.1 以前は、HWND や HMENUS などの Windows 型は void * 型でした。つまり、HWND や HMENUS をパラメータとして Windows 手続きを呼び出すこともでき、Windows はそれらを区別できません。Windows 3.1 の導入で、これらの型の多くは、別個の型に変更されました。現在では、Windows は、間違った型での呼び出しかどうかを判定できます。


この変更で、既存アプリケーションの開発者には膨大な作業が残されました。これらの Windows 手続き呼び出しで使用されているパラメータの型を変更する作業です。NO_STRICT 条件定義を使用することで、この変換作業の負荷が軽減されます。NO_STRICT の設定により、VCL では、以前のパラメータ型を引数として受け取って変換を行う Windows 手続きのオーバーロードへのエントリ ポイントが提供されます。