|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|||||||||||||||||||||
[C/C++]Компилятор g++.Странности с true и false.Кто нибудь может прокомментировать/повторить это у себя?12.10.2009, 00:31. Показов 5098. Ответов 26
Метки нет (Все метки)
Заметил такую странность:
Это проходит компиляцию
У меня случайно сначала так вышло,но вообще подразумевалось
0
|
|||||||||||||||||||||
| 12.10.2009, 00:31 | |
|
Ответы с готовыми решениями:
26
БОМБА это кто нибудь может объяснить? Кто-нибудь может объяснить как это работает? может кто нибудь объяснить что это за цифры |
|
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
|
||||||||||||||||||||||||||
| 12.10.2009, 00:36 | ||||||||||||||||||||||||||
|
потому что у тебя false == 0
получается, что
а вот
1
|
||||||||||||||||||||||||||
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|
| 12.10.2009, 00:38 [ТС] | |
|
По идее false и NULL это не одно и тоже.Да и в C++ null не определён вроде,вот и спрашиваю.В-общем,мне как-то видится это нештатной ситуацией
0
|
|
|
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
|
|
| 12.10.2009, 00:46 | |
|
ну приводится же int к bool всегда, и все к этому привыкли уже, так почему бы и обратно не приводилось?
1
|
|
|
14 / 14 / 4
Регистрация: 08.10.2009
Сообщений: 114
|
||||||
| 12.10.2009, 01:18 | ||||||
|
Если ты указателю присваиваешь значение 0 (a это и есть false), то это означает, что он не указывает ни на какую область памяти и это нормально. Но если ты хочешь присвоить указателю значение 1 (true), тоесть ты хочешь, чтобы он указывал на область памяти которая начинается с ячейки №1, то ты должен написать так:
1
|
||||||
|
|
|||||||
| 11.12.2009, 11:42 | |||||||
|
Когда-то #pragma искал примеры непереносимых кодов. Можно привести ещё пример. Предполагаем, что во всех трёх случаях делается сравнение с NULL
3
|
|||||||
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|||||||||||
| 11.12.2009, 15:39 [ТС] | |||||||||||
|
>Немного не так. По стандарту Си должно быть некоторое специальное значение указателя и чтобы ни один объект не мог иметь такой адрес. В заголовочных файлах такое значение должно быть описано как NULL. Если p - это некий указатель, то "if (p)" должно трактоваться как "if (p != NULL)".
Точно. NULL не равен нулю(не всегда). По идее NULL должен (или нет?) быть определён как
Но я вроде читывал,что в некоторых реализациях компиляторов этим могли пренебречь (особенно в новых) и определить NULL как
0
|
|||||||||||
|
|
|
| 11.12.2009, 15:47 | |
|
> Чтобы никуда не указывать
Формулировка неправильная. Просто из всего диапазона адресов выбирается некоторое значение и говорится, что у нас не существует ни одного объекта с таким адресом. Далее заводится макрос NULL с этим значением, а так же на это значение настраивается компилятор, чтобы адэкватно строить сравнения и не выдавать ошибки там где не надо. Конкретное значение для NULL - зависит от платформы. Т.е. для всех "нормальных" платформ в качестве NULL выбирается ноль (и под такое значение настраивается макрос и компилятор). Для сигнальных процессоров выбирается другое значение.
1
|
|
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|
| 11.12.2009, 15:49 [ТС] | |
|
Да,спасибо,я прочитал внимательнее твой пост
0
|
|
|
|
||||||
| 11.12.2009, 15:51 | ||||||
|
Собственно макрос NULL придумали опять-таки по соображениям переносимости кода между платформами. Т.е. программист пишет код:
1
|
||||||
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|
| 11.12.2009, 16:17 [ТС] | |
|
А ты на Багзилле в gcc зарегистрирован? Может,стоит написать им,чтобы компилятор хотя бы предупреждение выводил?
0
|
|
|
|
|
| 11.12.2009, 16:22 | |
|
g++ всё делает согласно стандарту. Значение false эквивалентно нулю (что эквивалентно NULL), а потому такое присваивание можно делать без явного преобразования типа. А вот для true уже нельзя. Borland C++ работает ровно так же
1
|
|
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
||
| 04.11.2010, 23:20 [ТС] | ||
|
Evg, я тут кое что накопал про NULL и 0. Выдержка из книги "Beej Guide to Network Programming"
0
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 04.11.2010, 23:25 | |
|
#pragma, В Си действительно различны (ну как и говорил Evg, от архитектуры зависит).
В С++ его не рекомендуется использовать. Но определен он как #define NULL 0. Хотя не исключаю, что тоже может зависить от архитектуры
1
|
|
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
||||||
| 04.11.2010, 23:30 [ТС] | ||||||
|
Хз,от чего это зависит,но select()-довольно часто используемая функция в linux.
про
Мне интересно,как они эти параметры сравнивают внутри select ..
0
|
||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 05.11.2010, 00:52 | ||
|
В языке С было очень популярно определять макрос NULL для представления такого нулевого указателя. Так как в С++ типы проверяются более жестко, использование банального нуля вместо NULL приведет к меньшим проблемам. Если вы чувствуете, что просто обязаны определить NULL, воспользуйтесь const int NULL = 0; Модификатор const (§ 5.4) предотвращает ненамеренное замещение NULL и гарантирует, что NULL можно использовать везде, где требуется константа.» <Конец цитаты> Ну а приведенное вами выражение не одного вас удивило. В книге «Дизайн и эволюция языка C++» Страуструп пишет: «Но меня по-прежнему удивляет правило, согласно которому результат вычисления любого константного выражения, равный 0, принимается в качестве нулевого указателя. Согласно этому правилу, 2-2 и ~-1 - нулевые указатели.» <Конец цитаты> Видимо поэтому в новом стандарте предусмотрено специальное ключевое слово для обозначения пустого указателя.
0
|
||
|
57 / 57 / 5
Регистрация: 31.10.2010
Сообщений: 103
|
|
| 05.11.2010, 02:27 | |
|
В С++ NULL == 0 и компиляторов C++ для микропроцессоров не существует. Для Си есть, но там NULL хоть что-то значит. Однако в свежем стандарте С++, который готовится, будет таки специальная штука null, которая будет служить как раз для тех же целей что и NULL в Си.
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 05.11.2010, 02:28 | |
|
KpeHDeJIb, nullptr, а не null.
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 05.11.2010, 03:05 | ||
|
0
|
||
| 05.11.2010, 03:05 | |
|
Помогаю со студенческими работами здесь
20
действительно трудная задача может быть кто нибудь рискнет за это взяться Кто объяснит почему true == false ? Если bool name=false, то !name это true? Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы Что это? .MainFormOnTaskbar := True; Тут ошибка False не помог Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|