пятница, февраля 04, 2005

warning C4503

warning C4503: '' : decorated name length exceeded, name was truncated
По документации: "The decorated name was longer than the compiler limit (247), and was truncated."

У него есть "родственный" ворнинг: C4786
По документации: "The debugger cannot debug code with symbols longer than 255 characters. "

У Visual C++ 6.0 есть ограничение на длину объявления переменной, объявления функции . И если попытаться объявить что-нибудь более менее сложное, какой-нибудь мэп с участием векторов, то он в этот лимит не влезет.
Рецепты по лечению:
  • Использовать другой компилятор :-)
  • Использовать define'ы, чтобы сократить объявления переменных. #define basic_string b_s. Это извращение какое-то.
  • Использовать typedef'ы. Хотя встречала мнение, что это помогает не всегда...
  • Выключить этот ворнинг с помощью #pragma warning(disable: 4503). Соответственно, объявление будет обрезано. Какие-либо проблемы могут возникнуть, только если эти начальные символы совпадут с начальными символами другого объявления, что маловероятно.

3 комментария:

  1. 5-й Способ. Вместо Попыток Описать Все Нагромождением Элементарных Типов, Создать Наконец Свои Классы С Нормальным Поведением И Именами. Вот :-)

    ОтветитьУдалить
  2. Анонимный27/12/15 18:57

    Спасибо, решил просто выключить в хидере через "прагму".
    Единственная опасность ошибка Линкера - если в декларациях переменных после обрезки 4096 символов совпадут.
    Собственно об этом говорят на Мсдн, также там советуют делать обертки структурами или классами, но как по мне это совсем Лишнее.
    https://msdn.microsoft.com/en-us/library/074af4b6.aspx

    ОтветитьУдалить