Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
gGrn-7DA
мну довольно <(-__-)l
203 / 192 / 1
Регистрация: 17.01.2010
Сообщений: 2,392
Завершенные тесты: 1
#1

Странное поведение bool - C++

13.02.2012, 20:48. Просмотров 1514. Ответов 23
Метки нет (Все метки)

Помогал отлаживать код и мы наткнулись на удивительное.

Кодер скрыл отображение варнингов в VS2010.
Метод М1 не всегда возвращал значение типа bool.
И потому в методе М2, вызывающем метод М1, случилась такая ситуация, что:
C++
1
M1()!=true & M1()!=false
Это нормальное поведение компилятора?
Логика то понятна, но почему это вообще варнинг, а не еррор как в си шарпе?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2012, 20:48     Странное поведение bool
Посмотрите здесь:

Странное поведение! - C++ Builder
Доброго времени суток! На лицо странное (на мой взгляд) поведение С++ Builder 6. Итак код: String TBlockScheme::FigureCode(TPoint...

Странное поведение - C++ WinAPI
#include &lt;windows.h&gt; LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance,...

Странное поведение компилятора - C++
Всем привет! Я конечно понимаю что нужно выкладывать минимальный код повторяющий мою проблему но он будет достаточно грамосток т.к. в...

Странное поведение программы - C++
Перечитываю Герберт Шилдт: С++ базовый курс. Простая программа: #include &lt;iostream&gt; using namespace std; int main() { ...

Странное поведение UnicodeString. - C++ Builder
С некоторого момента UnicodeString без особых на то причин начала вести себя странно. Variang vstr = &quot;debug_1&quot;; UnicodeString ustr; ...

Странное поведение окон - C++ Builder
Здравствуйте! Демка с комментами Суть. Мне нужно создать независимое окно с отдельной кнопкой в таскбаре, для этого...

Странное поведение string - C++
Здравствуйте. Сейчас я пытаюсь скомпилировать под Windows проект, который ранее писался под Linux. Делаю я это с помощью MinGW от...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,892
Записей в блоге: 26
13.02.2012, 22:20     Странное поведение bool #16
Sun'овский компилятор (к которому на моей памяти ещё не было ни одной претензии по части поддержки стандарта) действительно запрещает это дело, а вариант, когда по одной ветке есть return, а по другой нету - нормально компилируется
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
13.02.2012, 22:23     Странное поведение bool #17
Цитата Сообщение от Evg Посмотреть сообщение
Sun'овский компилятор (к которому на моей памяти ещё не было ни одной претензии по части поддержки стандарта) действительно запрещает это дело, а вариант, когда по одной ветке есть return, а по другой нету - нормально компилируется
как ни странно vs2010 имеет такое же поведение
Evg
Эксперт CАвтор FAQ
17536 / 5774 / 370
Регистрация: 30.03.2009
Сообщений: 15,892
Записей в блоге: 26
13.02.2012, 22:30     Странное поведение bool #18
Цитата Сообщение от retmas Посмотреть сообщение
как ни странно vs2010 имеет такое же поведение
Я им не пользуюсь. У меня из виндузовых есть только borland
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
13.02.2012, 22:51     Странное поведение bool #19
самое интересное, что согласно
Flowing off the end of a function is equivalent to a return with no value
C++
1
2
3
4
int f()
{
   // noreturn - ошибка
}
и
C++
1
2
3
4
int f()
{
   return;
}
одно и то же.
но в первом случае g++ выдает ворнинг, а во 2-м - ошибку. похоже это не просто не стандартное поведение(aka расширение), а баг. может стоит репортнуть(если не репортилось это ранее)?

Добавлено через 15 минут
gcc жрет оба варианта
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
13.02.2012, 22:57     Странное поведение bool #20
retmas, свежий gcc(и g++) для целых ноль возвращает по умолчанию(для всех, не только main), причём некоторое время назад он так не делал, таки расширение
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
13.02.2012, 23:20     Странное поведение bool #21
у меня 4.6.2 - не такой уж и древний.
для С++ в стандарте явно сказано, что должно быть. нет там никаких умолчаний. умолчания были "во времена Очакова и покорения Крыма".
либо ретурн что-то явно(для возвращающих значение ф-ий), либо(в отсутствие ретурна) интерпретируется как ретурн воид
поправьте, если не прав

Добавлено через 11 минут
хотя, соглашусь. нет тут бага. вроде разобрался почему g++ жрет такое
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,363
14.02.2012, 09:30     Странное поведение bool #22
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
да, логично. Но почему оно != true и != false
Потому, что оно неинициализированное.
gGrn-7DA
14.02.2012, 19:02  [ТС]
  #23

Не по теме:

CheshireCat, да, уже разобрались.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2012, 19:48     Странное поведение bool
Еще ссылки по теме:

Странное поведение указателя - C++
class XMLDocument { public: char *xml; XMLDocument() { }; void NewXML()

Странное поведение строки - C++
Есть класс со связным списком(в связных списках символы)(файл1). Перегружаю оператор сложения для объектов этих классов так, чтобы оператор...

Странное поведение транслятора - C++
В следуюшем примере код компилируется нормально, но объект класса b не содается (пробывал на Visual studio 10 и на Borland builder 5), что...

Странное поведение указателей - C++
Здравствуйте, может кто-нибудь объяснить столь странное поведение указателя. Вот код. int main() { const int Width = 3; ...

Странное поведение присваивания - C++
class Lexem { public: uint id; uint value; uint line; uint pos; bool operator==(int a){ return a...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Kastaneda
14.02.2012, 19:48     Странное поведение bool
  #24

Не по теме:

C++
1
M1()!=true & M1()!=false
если бы M1() возвращала значение, то можно было бы подумать, что это проверка на NAN. Я сразу так и подумал, пока дальше тему не почитал.

Yandex
Объявления
14.02.2012, 19:48     Странное поведение bool
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru