/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 开发环境中设置此编译器选项
打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
选择“配置属性”>“C/C++”>“命令行”属性页。
在“附加选项”框中输入编译器选项。
以编程方式设置此编译器选项
- 请参阅 AdditionalOptions。