Просмотр сообщений
|
Страниц: 1 ... 3 4 [5] 6 7 ... 96
|
61
|
Компиляторы и платформы / Компиляторы / Re: Странность с Clang.
|
: Октябрь 26, 2019, 18:28
|
Тогда этот "чувачок" в Qt Team работает. Потому как я лично просто стал использовать ровно то, что приехало с Qt 5.12.5, без изменений. Можно ссылку, где в Qt такое непотребство? Ссылочку на что? На дистрибутив Qt для установки?
|
|
|
62
|
Компиляторы и платформы / Компиляторы / Re: Странность с Clang.
|
: Октябрь 26, 2019, 00:59
|
говорят там такое написано. Flowing off the end of a constructor, a destructor, or a function with a cv void return type is equivalent to a return with no operand. Otherwise, flowing off the end of a function other than main (6.6.1) results in undefined behavior. И это есть бред, который K&R идеологии противоречит, и не имеет силы поэтому.
|
|
|
65
|
Компиляторы и платформы / Компиляторы / Re: Странность с Clang.
|
: Октябрь 24, 2019, 13:23
|
Мой баг только в отсутствии return. Но это совсем не undefined behaviour. Behaviour как раз defined - завершился блок, составляющий тело функции. Значит завершилась функция, и из неё должен быть возврат. Только значение не определено - undefined value но не behaviour. Во всяком случае именно так работали все 6-7 компиляторов, которыми я когда-либо пользовался, начиная с K&R C в RT-11. Если там в статье написано что-то другое - значит чушь написана.
|
|
|
66
|
Компиляторы и платформы / Компиляторы / Re: Странность с Clang.
|
: Октябрь 24, 2019, 10:31
|
однако баг репортом запахло...
По стандарту эта ситуация приводит к UB. Хотели неопределенности - нате. Не.... неопределённость в возвращаемом значении. Но не в алгоритме. По алгоритму функция завершилась, должен быть возврат без определённого значения функции. Обязан быть ret после разбора закрывающей фигурной скобки. Но его нет. Это баг.
|
|
|
68
|
Компиляторы и платформы / Компиляторы / Странность с Clang.
|
: Октябрь 23, 2019, 13:21
|
Недавно перевёл свои проекты для Android для Clang - теперь им Qt5 собирается. В проекте была ошибка void SettingsDlg::isCalendar(bool goodName) { ui->calendarName->setStyleSheet( goodName ? stylegood : stylebad ); }
bool SettingsDlg::isCalendar(QString accountName) { isCalendar( _checkforname(QString) ); }
и вызов выше был: isCalendar( oldname );
То есть у второго варианта функции не было возвращаемого значения, хотя функция объявлена как bool (и в .h также). Компилятор выдал предупреждение, хотя по идее должна выдаваться ошибка - возвращаемое значение не определено. Даже QtCreator 5.10 отметил строку замечанием. Но самое странное, что в таком случае... происходило падение при выходе из второго варианта. Заменил возврат bool на void - всё стало нормально. Ну предупреждение вместо ошибки - это ещё ладно, хотя IMHO должна быть серьёзная ошибка. Но падать то от чего? Возврат ведь не использовался. Неопределённое булево значение легло на стек - false или true, не известно. Но его значение вызывающая функция проигнорировала, указатель стека просто отсчитала на 1 больше, и всё. Пересмотрел ещё раз код - других косяков не видно, работает как вкопанный. То есть, вторичной наведённой ошибки тоже вроде не было. Да и как она может быть, это же не переменная не инициализированная - одно слово на стеке.
|
|
|
71
|
Qt / Qt-инструментарий / Чё я только что узнал про QtCreator... для Android существенно.
|
: Октябрь 02, 2019, 12:40
|
Все знают, что после процесса сборки можно добавить свой кастомный шаг. Это вообще необходимая вещь при создании приложений для Android, поскольку APK залетает глубоко в каталоги, и имеет всегда одно и то же имя android-build-release-signed.apk. Его оттуда надо выковыривать и переименовывать перед публикацией. Можно создать кастомный шаг сборки и добавить команду копирования (правда с этого момента сама сборка перестанет быть мультиплатформенной). Например:
Команда: cp Параметры: android-build-release-signed.apk /<маршрут куда копировать>/<имя приложения>.<имя компании>.com.apk Рабочий каталог: %{CurrentProject:BuildPath}/android-build/build/outputs/apk
Всё дело в том, что для файлов APK с некоторых пор Google требует чтобы все символы были в нижнем регистре. То есть, если название проекта совпадает с названием приложения, но имеет символы в верхнем регистре, то его уже нельзя просто так подставить вместо <имя приложения>. Однако, есть изворот, как сказали в Qt team:
%{JS: '%{CurrentProject:Name}'.toLowerCase()} - это название приложения в нижнем регистре. То есть, можно в кастомный шаг вписать
Параметры: android-build-release-signed.apk /<маршрут куда копировать>/%{JS: '%{CurrentProject:Name}'.toLowerCase()}.<имя компании>.com.apk
у всех своих приложений для Android - и переименованные файлы будут улетать в нужное место. Не идеально, конечно, но кучу времени на клики мышкой и наборы текста экономит.
Проверил - работает.
|
|
|
72
|
Qt / Общие вопросы / Re: Сохранить вложенную "константу строки" в RegExp
|
: Август 24, 2019, 14:33
|
тогда лишаемся такой возможности 2+2 Эта хотелка давно и просто делается рекурсивным разбором выражений. Описано в любом учебнике по компиляторам. Можно просто тупо брать ветку БНФ из языка Си, и реализовывать. Разумеется, таким же разбором можно и кавычки и любые скобки разбирать без всяких RegExp, но в реальном приложении это будет стрельба из пушки по воробьям.
|
|
|
73
|
Qt / Общие вопросы / Re: Сохранить вложенную "константу строки" в RegExp
|
: Август 21, 2019, 15:21
|
Я бы предложил TC, на основе архитектуры boost::tokenizer, написать свой класс QTokenizer. Думаю, это работа на пару вечеров.
Когда-нибудь в другой раз. Мне меньше чем за 10 дней до отъезда надо кучу всего сделать. Поскольку решение быстро не было найдено, пришлось изменить спецификации - разрешить в строке простые тэги и быстро сделать разбор строки по ним. За полдня. Так что вопрос пока снимается. Но вообще писание самих регэкспов достаточно муторное занятие, интересно было бы иметь что-то вроде "библиотеки" из них. Публичной, разумеется. Чтобы в ней можно было найти готовое решение для своей задачи, или хотя бы с минимальной корректировкой, возможностью тут же онлайн проверить вводом тестовой строки. Может быть такое уже и есть, но я не нашёл.
|
|
|
74
|
Qt / Общие вопросы / Re: Сохранить вложенную "константу строки" в RegExp
|
: Август 20, 2019, 22:11
|
Просмотрел, там много воды и нет явного подходящего варианта. Много лишнего, задача немного другая, немного проще - в строке цельные токены выделяются только кавычками. Ковырять и экспериментировать мне некогда. Boost и std:string не подходят, у меня их нет в приложении вообще, оно делается для Android. Сейчас пока на GNU CC, потом для выпуска перейду на Clang - там родное Qt-шное гарантированно работает, а с посторонними библиотеками и тулзами не известно. Поэтому только QString и собственные библиотеки Qt5.
|
|
|
75
|
Qt / Общие вопросы / Сохранить вложенную "константу строки" в RegExp
|
: Август 20, 2019, 12:54
|
Нужен разбор строки аналогичный QStringList parts = entire.split(QRegExp("\\W+"), QString::SkipEmptyParts);, но чтобы если в ней встречается последовательность символов между двойных кавычек, она целиком и без кавычек переносилась в элемент List-а. То есть, если есть строка:
Мама, глядя, сказала: "твою мать"\n и ушла.
Она разбиралась на
Мама глядя сказала твою мать и ушла
То есть, строка эта изначально в QString (не строковая константа в коде), а \n - символ перевода каретки внутри неё. Может у кого-нибудь в коллекции есть такое? В кладовой готовых я не нашёл, гугл выдаёт всякую хрень.
|
|
|
|
|