次の方法で共有


/H (外部名の長さの制限)

削除されました。 外部名の長さを制限します。

構文

/Hnumber

引数

number
プログラムで許可される外部名の最大長を指定します。

解説

既定では、外部 (パブリック) 名の長さは 2,047 文字です。 これは、C と C++ プログラムに当てはまります。 /H を使用すると、識別子の許容最大長を減らすことだけができ、値を増やすことはできません。 /Hnumber の間のスペースは省略できます。

number より長い外部名がプログラムに含まれている場合、余分な文字は無視されます。 /H を指定せずにプログラムをコンパイルし、識別子に 2,047 より多くの文字が含まれている場合は、コンパイラによって致命的なエラー C1064 が生成されます。

長さの制限には、コンパイラによって作成される先頭のアンダースコア (_) またはアットマーク (@) が含まれます。 これらの文字は、識別子の一部であり、重要な場所を占めます。

  • コンパイラは、__cdecl (既定) および __stdcall の呼び出し規則によって変更された名前の先頭にアンダースコア (_) を追加し、__fastcall 呼び出し規則によって変更された名前の先頭にアットマーク (@) を追加します。

  • コンパイラは、__fastcall および __stdcall の呼び出し規則によって変更された名前に引数サイズ情報を追加し、C++ 名に型情報を追加します。

次の場合、/H が役に立つことがあります。

  • 混合言語プログラムまたは移植可能なプログラムを作成する場合。

  • 外部識別子の長さに制限があるツールを使用する場合。

  • デバッグ ビルドでシンボルが使用する領域の量を制限する必要がある場合。

次の例は、識別子の長さが過度に制限されている場合に、/H を使用すると実際にどのようにエラーが発生するかを示したものです。

// compiler_option_H.cpp
// compile with: /H5
// processor: x86
// LNK2005 expected
void func1(void);
void func2(void);

int main() { func1(); }

void func1(void) {}
void func2(void) {}

また、/H オプションを使用するときは、定義済みのコンパイラ識別子にも注意する必要があります。 識別子の最大長が小さすぎる場合、特定の定義済み識別子や、特定のライブラリ関数呼び出しが未解決になります。 たとえば、printf 関数が使用されている場合、コンパイル時に /H5 オプションを指定すると、printf を参照するためにシンボル _prin が作成され、これはライブラリに見つかりません。

/H の使用は、/GL (プログラム全体の最適化) と互換性がありません。

Visual Studio 2005 以降では、/H オプションは非推奨になっています。最大長の制限は増やされており、/H は不要になりました。 非推奨のコンパイラ オプションの一覧については、「カテゴリ別のコンパイラ オプション」の「非推奨および削除されたコンパイラ オプション」をご覧ください。

Visual Studio 開発環境でこのコンパイラ オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。

  2. [構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。

  3. [追加のオプション] ボックスにコンパイラ オプションを入力します。

このコンパイラ オプションをコードから設定するには

関連項目

MSVC コンパイラ オプション
MSVC コンパイラ コマンド ラインの構文