мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
|
||||||
1 | ||||||
Странное поведение bool13.02.2012, 20:48. Показов 2348. Ответов 23
Метки нет (Все метки)
Помогал отлаживать код и мы наткнулись на удивительное.
Кодер скрыл отображение варнингов в VS2010. Метод М1 не всегда возвращал значение типа bool. И потому в методе М2, вызывающем метод М1, случилась такая ситуация, что:
Логика то понятна, но почему это вообще варнинг, а не еррор как в си шарпе?
0
|
13.02.2012, 20:48 | |
Ответы с готовыми решениями:
23
Странное поведение указателя Странное поведение! Странное поведение Builder XE Странное поведение UnicodeString. |
мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
|
|
13.02.2012, 20:53 [ТС] | 3 |
там не было ретарна)
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
13.02.2012, 20:59 | 4 |
0
|
9 / 9 / 2
Регистрация: 11.08.2011
Сообщений: 66
|
|
13.02.2012, 21:00 | 5 |
С моей точки зрения, это нормально. И если М1 возвращает не bool, то проверять возвращаемое значение на false или true бессмысленно. Лучше тогда проверять на ==0 или !=0 (если конечно, опять же, это имеет смысл).
А из-за того, что компилятор считает, что ты лучше знаешь, что делаешь, он вместо ошибки выдает предупреждение.
0
|
мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
|
||||||
13.02.2012, 21:11 [ТС] | 7 | |||||
Сразу скажу это не оригинальный код.
+ бонус к загадке, только что вспомнил еще одну странность. тут уже логика моя сдает) label1: и label2: только для наглядности. Не по теме: их нет и не было, это все ваше воображение) 1) label2: этого ретарна не было 2) label1: если раскоментить, то внешний цикл, работа которого зависит от возврата значения обрывался после первой итерации. если убрать работал как миленький на (M1()!=false) =)
да, логично. Но почему оно != true и != false И почему варнинг, которым многие пренебрегают, а не еррор??
0
|
9 / 9 / 2
Регистрация: 11.08.2011
Сообщений: 66
|
|
13.02.2012, 21:12 | 8 |
0
|
мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
|
|
13.02.2012, 21:14 [ТС] | 9 |
Не по теме: где скачать компилятор, для тех кто учится?! Он многим бы помог обучающимся...=) Добавлено через 1 минуту Не по теме: хз, не читал.
0
|
13.02.2012, 21:21 | 10 |
Считай, что вместо false у тебя константа со значение 0, вместо true - константа со значением 1, вместо bool - int. Именно такой код построит компилятор
Стандарт языка допускает отсутствие возвращаемого результата в не-void функциях. Почему - спроси у страуструпа
1
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|||||||||||
13.02.2012, 21:52 | 11 | ||||||||||
вернее он не запрещает отсутствие возвращаемого значения для всех возможных путей выполнения
не имеет смысла
1
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
13.02.2012, 22:05 | 13 |
1
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
13.02.2012, 22:19 | 15 |
да как раз только что нашел для С(правда драфт, но последний(April 12, 2011 ISO/IEC 9899:201x))
Добавлено через 2 минуты а вот из стандарта С++ (ISO/IEC 14882:2011 Third edition 2011-09-01) 6.6.3 The return statement
0
|
13.02.2012, 22:20 | 16 |
Sun'овский компилятор (к которому на моей памяти ещё не было ни одной претензии по части поддержки стандарта) действительно запрещает это дело, а вариант, когда по одной ветке есть return, а по другой нету - нормально компилируется
0
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
13.02.2012, 22:23 | 17 |
0
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|||||||||||
13.02.2012, 22:51 | 19 | ||||||||||
самое интересное, что согласно
но в первом случае g++ выдает ворнинг, а во 2-м - ошибку. похоже это не просто не стандартное поведение(aka расширение), а баг. может стоит репортнуть(если не репортилось это ранее)? Добавлено через 15 минут gcc жрет оба варианта
0
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
13.02.2012, 22:57 | 20 |
retmas, свежий gcc(и g++) для целых ноль возвращает по умолчанию(для всех, не только main), причём некоторое время назад он так не делал, таки расширение
0
|
13.02.2012, 22:57 | |
13.02.2012, 22:57 | |
Помогаю со студенческими работами здесь
20
Странное поведение окон Странное поведение XE2 Classic Bluetooth странное поведение сокета Странное поведение char при выводе в Edit Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |