Russian Qt Forum

Qt => Общие вопросы => Тема начата: berzerk от Январь 12, 2022, 13:52



Название: error: initializer-string for char array is too long
Отправлено: berzerk от Январь 12, 2022, 13:52
Кодировка файлов в проекте выбрана Windows-1251. В редакторе висит куча "выдуманных" предупреждений "error: initializer-string for char array is too long".
Данные предупреждения формируются "clang code model"? можно ли от них избавиться без отключения проверки размеров массивов?


Название: Re: error: initializer-string for char array is too long
Отправлено: DarkHobbit от Январь 15, 2022, 08:32
Кодировка файлов в проекте выбрана Windows-1251.

Про clang не подскажу, но корень ваших проблем - здесь. Не надо так делать. Да, часть проблем решается через принудительное задание кодеков и др., но рано или поздно косяки вылезут.

Я в своё время прогнал исходники через enca, теперь там только UTF-8.

(Ещё более правильный путь с точки зрения Qt - вообще не допускать в исходниках никаких нелатинских символов, русские и прочие строки держать в файлах переводов. Но для проекта, который никогда не выйдет за пределы России, это сильно избыточный подход, да.)


Название: Re: error: initializer-string for char array is too long
Отправлено: berzerk от Январь 15, 2022, 10:23
Код отлаживается на ПК, но его основная цель - микроконтроллер. Хранить и обрабатывать строки в МК на много проще и выгоднее в кодировке windows-1251. Я не знаю способа, по крайней мере простого, для смены кодировки файлов во время сборки проекта.


Название: Re: error: initializer-string for char array is too long
Отправлено: kambala от Январь 15, 2022, 16:44
Я не знаю способа, по крайней мере простого, для смены кодировки файлов во время сборки проекта.
этого можно добиться с помощью генерации файла в нужной кодировке во время сборки. в utf-8 будет файл-шаблон (логичнее всего в нем держать только нужные строки и ничего больше), а системе сборки задать «правило» для генерации конечного файла с помощью, например, iconv. Этот же файл и будет потом компилироваться, а не шаблон.


Название: Re: error: initializer-string for char array is too long
Отправлено: berzerk от Январь 18, 2022, 16:06
Спасибо за помощь. Я до последнего надеялся что можно все решить стандартными средствами IDE.


Название: Re: error: initializer-string for char array is too long
Отправлено: kambala от Январь 18, 2022, 16:36
Спасибо за помощь. Я до последнего надеялся что можно все решить стандартными средствами IDE.
не знаю поможет ли, попробуй добавить -finput-charset=windows-1251 (может кодировка по-другому называется) в настройки — C++ — Code Model — build system warnings — скопировать одну из существующих и вписать параметр в нижнее поле


Название: Re: error: initializer-string for char array is too long
Отправлено: berzerk от Январь 19, 2022, 09:02
Ранее встречал упоминание о том, что поле "Clang Warning" предназначено только для управления проверками. На деле так и получилось. Ошибка конфигурации выдается на все что не начинается с "-W" и такие опции просто удаляются.


Название: Re: error: initializer-string for char array is too long
Отправлено: DarkHobbit от Январь 21, 2022, 09:12
Хранить и обрабатывать строки в МК намного проще и выгоднее в кодировке windows-1251.
А что уж тогда не в канонiчном КОИ8-Р?  ;D


Название: Re: error: initializer-string for char array is too long
Отправлено: berzerk от Январь 21, 2022, 10:15
Если объясните что вызвает смех в этих словах, то может быть посмеюсь вместе с вами.


Название: Re: error: initializer-string for char array is too long
Отправлено: DarkHobbit от Январь 21, 2022, 15:04
Если объясните что вызвает смех в этих словах, то может быть посмеюсь вместе с вами.
Это не смех, а добрая улыбка. Ну правда, вы же из однобайтовых кодировок почему-то сразу виндовую вспомнили, а она, хм, не самая "классическая".


Название: Re: error: initializer-string for char array is too long
Отправлено: berzerk от Январь 21, 2022, 17:15
Стандартная кодировка в Windows. Я даже и не задумывался о влиянии кодировки файла С++ проекта на работу программы в микроконтроллере. Этот "нюанс" вспыл на мно-о-о-го позднее, когда я последовал моде и создал новый проект в utf-8. И  прошло еще мно-о-о-го лет до текущего момента, когда я решил расстаться с Eclipse и получил желтый от предупреждений в проекте экран.