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


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

Обновлен: Ноябрь 2007

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

 /Hnumber

Аргументы

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

Заметки

По умолчанию длина для внешних имен ограничена до 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, для ссылки на printf будет создан символ _prin, но он не будет найден в библиотеке.

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

Не рекомендуется использовать /H в Visual C++ 2005; максимальная предельная длина была увеличена и в /H нет необходимости. Дополнительные сведения см. в разделе Нерекомендуемые параметры компилятора в Visual C++ 2005.

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

  1. Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Открытие свойств страниц проекта.

  2. Откройте папку C/C++.

  3. Выберите страницу свойств Командная строка.

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

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

См. также

Ссылки

Параметры компилятора

Настройка параметров компилятора