/H(限制外部名称长度)

已弃用。 限制外部名称的长度。

语法

/Hnumber

参数

数字
指定程序中允许的外部名称的最大长度。

注解

默认情况下,外部(公共)名称的长度为 2047 个字符。 这适用于 C 和 C++ 程序。 使用 /H 仅能减少标识符的最大允许长度,而不能增加该长度。 /H 和 number 之间的空格是可选的。

如果程序包含的外部名称长度超过 number,则忽略多余的字符。 如果不使用 /H 编译程序,且标识符包含的字符超过 2047 个,编译器将生成错误 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 选项,则会创建 _prin 符号以引用 printf,而其在库中将无法找到。

使用 /H 与使用 /GL(全程序优化)不兼容。

自 Visual Studio 2005 起已弃用 /H 选项;增加了最大长度限制,不再需要 /H。 有关已弃用编译器选项的列表,请参阅按类别列出的编译器选项中的已弃用并删除的编译器选项

在 Visual Studio 开发环境中设置此编译器选项

  1. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  2. 选择“配置属性”>“C/C++”>“命令行”属性页

  3. 在“附加选项”框中输入编译器选项。

以编程方式设置此编译器选项

另请参阅

MSVC 编译器选项
MSVC 编译器命令行语法