Russian Qt Forum
Май 23, 2024, 18:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Странность с Clang.  (Прочитано 57341 раз)
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #15 : Октябрь 25, 2019, 12:15 »

можно ссылку, для ликбеза, на стандарт по УБ для данного случая ?

В разных стандартах формулировки незначительно отличаются. В текущем черновике вот так написано:
Цитировать
Flowing off the end of a constructor, a destructor, or a non-coroutine 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 or a coroutine ([dcl.fct.def.coroutine]) results in undefined behavior.

И вот тут ещё:
Цитировать
Change: It is now invalid to return (explicitly or implicitly) from a function which is declared to return a value without actually returning a value.

Rationale: The caller and callee may assume fairly elaborate return-value mechanisms for the return of class objects. If some flow paths execute a return without specifying any value, the implementation must embody many more complications. Besides, promising to return a value of a given type, and then not returning such a value, has always been recognized to be a questionable practice, tolerated only because very-old C had no distinction between void functions and int functions.

А также можно почитать: Why does flowing off the end of a non-void function without returning a value not produce a compiler error?.
Записан

Пока сам не сделаешь...
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #16 : Октябрь 25, 2019, 12:44 »

Тогда этот "чувачок" в Qt Team работает. Потому как я лично просто стал использовать ровно то, что приехало с Qt 5.12.5, без изменений.

Можно ссылку, где в Qt такое непотребство?
Записан

Пока сам не сделаешь...
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #17 : Октябрь 25, 2019, 16:49 »

clang из Xcode по умолчанию выдает предупреждения -Wreturn-type, например. у меня никаких нестандартных настроек в креаторе и проекте нет.
« Последнее редактирование: Октябрь 25, 2019, 16:50 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #18 : Октябрь 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 идеологии противоречит, и не имеет силы поэтому.
Записан

2^7-1 == 127, задумайтесь...
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #19 : Октябрь 26, 2019, 14:01 »

И это есть бред, который K&R идеологии противоречит, и не имеет силы поэтому.

У К&Р не было классов и можно было возвращать 0. А что возвращать в плюсах? Дефол-констрактед Т? А если дефолт ктора нет? Вот вам и УБ что определить поведение по умолчанию невозможно.
Как выше уже написали, можно написать такую функцию, которая будет иметь ветку без return, но которая никогда не выполнится (и анализатор хрен докажет что эта ветка не выполняется) => всё отлично, функция абсолютно валидная с тз языка и юзкейзов и никакого УБ.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #20 : Октябрь 26, 2019, 18:28 »

Тогда этот "чувачок" в Qt Team работает. Потому как я лично просто стал использовать ровно то, что приехало с Qt 5.12.5, без изменений.

Можно ссылку, где в Qt такое непотребство?
Ссылочку на что? На дистрибутив Qt для установки?
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #21 : Октябрь 26, 2019, 18:31 »

У К&Р не было классов и можно было возвращать 0. А что возвращать в плюсах?
То же самое, что и без плюсов. Функция описана как возвращающая bool. Классы тут ни при чём, этот тип по-умолчанию обычный скалярный, такой же как у K&R.
Записан

2^7-1 == 127, задумайтесь...
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #22 : Октябрь 26, 2019, 19:36 »

Можно ссылку, где в Qt такое непотребство?
Ссылочку на что? На дистрибутив Qt для установки?

Весь дистрибутив Qt - сплошное непотребство? Шокированный У меня, конечно, были подозрения, но не такого масштаба.

То есть у второго варианта функции не было возвращаемого значения, хотя функция объявлена как bool (и в .h также). Компилятор выдал предупреждение, хотя по идее должна выдаваться ошибка - возвращаемое значение не определено. Даже QtCreator 5.10 отметил строку замечанием.
Мой баг только в отсутствии return.
Тогда этот "чувачок" в Qt Team работает. Потому как я лично просто стал использовать ровно то, что приехало с Qt 5.12.5, без изменений.

Так баг у вас или у чувачка из Qt Team?
Записан

Пока сам не сделаешь...
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #23 : Октябрь 26, 2019, 20:48 »

Цитировать
Так баг у вас или у чувачка из Qt Team?

Наврятли это из Qt-team, слишком уж код-стайл не тот.  Строит глазки
Записан

ArchLinux x86_64 / Win10 64 bit
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #24 : Октябрь 26, 2019, 21:59 »

Так баг у вас или у чувачка из Qt Team?

Чтобы не терять смысл написанного другими, и не задавать глупые вопросы, надо внимательнее читать реплики.
« Последнее редактирование: Октябрь 26, 2019, 22:17 от Гурман » Записан

2^7-1 == 127, задумайтесь...
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #25 : Октябрь 27, 2019, 10:42 »

Чтобы не терять смысл написанного другими, и не задавать глупые вопросы, надо внимательнее читать реплики.

Действительно, я было подумал, что из-за опции компилятора, где-то в Qt пропустили функцию без return. Оказывается, всё намного проще. Вопрос про непотребства в Qt снимается.

У чувачка банальный -Wall не включен а виноват кланг лол

Тогда этот "чувачок" в Qt Team работает. Потому как я лично просто стал использовать ровно то, что приехало с Qt 5.12.5, без изменений.

Т.е. какие опции компилятора в Qt  Team выставят, с такими вы проекты и собираете. Сами эти опции не контролируете, и задать другие, без чувачка из Qt  Team, не можете.
Записан

Пока сам не сделаешь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #26 : Октябрь 27, 2019, 11:41 »

Т.е. какие опции компилятора в Qt  Team выставят, с такими вы проекты и собираете. Сами эти опции не контролируете, и задать другие, без чувачка из Qt  Team, не можете.
Могу. Но ещё я 11 лет езжу на машине марки Ford, и ни разу не перепрограммировал её управление двигателем и коробкой передач. Хотя тоже могу.
Записан

2^7-1 == 127, задумайтесь...
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #27 : Январь 28, 2022, 04:22 »

можно ссылку, для ликбеза, на стандарт по УБ для данного случая ?

http://eel.is/c++draft/stmt.return#4

Цитировать
Flowing off the end of a constructor, a destructor, or a non-coroutine 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 or a coroutine ([dcl.fct.def.coroutine]) results in undefined behavior.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 22.