Поделиться через


/H (ограничение длины внешних имен)

Устарело. Ограничивает длину внешних имен.

Синтаксис

/Hчисло

Аргументы

number
Указывает максимальную длину внешних имен, разрешенных в программе.

Замечания

По умолчанию длина внешних (общедоступных) имен составляет 2047 символов. Это верно для программ C и C++. Использование /H может уменьшить только максимальную допустимую длину идентификаторов, а не увеличить ее. Пробел между /H и числом является необязательным.

Если программа содержит внешние имена дольше числа, дополнительные символы игнорируются. Если вы компилируете программу без /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 также следует тщательно использовать параметр /H из-за предопределенных идентификаторов компилятора. Если максимальная длина идентификатора слишком мала, некоторые предопределенные идентификаторы будут неразрешенными, а также некоторые вызовы функций библиотеки. Например, если printf функция используется и параметр /H5 указан во время компиляции, то символ _prin будет создан для ссылки printf, и это не будет найдено в библиотеке.

Использование /H несовместимо с /GL (оптимизация всей программы).

Параметр /H не рекомендуется использовать с момента Visual Studio 2005. Максимальные ограничения длины были увеличены, и /H больше не требуется. Список устаревших параметров компилятора см. в разделе "Устаревшие" и "Удаленные параметры компилятора" в параметрах компилятора, перечисленных по категориям.

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.

  3. Введите параметр компилятора в поле "Дополнительные параметры ".

Установка данного параметра компилятора программным способом

См. также

Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC