Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926

[C/C++]Компилятор g++.Странности с true и false.Кто нибудь может прокомментировать/повторить это у себя?

12.10.2009, 00:31. Показов 5413. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заметил такую странность:
Это проходит компиляцию
C++
1
bool *b = false;
А это нет
C++
1
bool *b = true;
Code
1
error: cannot convert ‘bool’ to ‘bool*’ in initialization
Компилятор g++.Почему это вообще проходит компиляцию в каком либо виде?Я понимаю,это как-то связано с инициализацией указателя,а false типа трактуется как NULL?Хотелось бы знать,как точно это работает.
У меня случайно сначала так вышло,но вообще подразумевалось
C++
1
bool *b = new bool(false);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2009, 00:31
Ответы с готовыми решениями:

БОМБА это кто нибудь может объяснить?
Взгляните на статичтику http://www.liveinternet.ru/stat/ru/searches.html Гугля обогнал рамблер хотя всегда был за ним и стал всего...

Кто-нибудь может объяснить как это работает?
Именно создание списка не понятно main :: IO() main = do let fib = 0 : 1 : n <- readLn print(fib !! n)

может кто нибудь объяснить что это за цифры
дана программа может кто нибудь объяснить что это за цифры s:5:3 program proga7; uses crt; var x:array of integer; i,j,n,b,l:...

26
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13229 / 6861 / 1827
Регистрация: 18.10.2014
Сообщений: 17,390
29.12.2016, 17:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Mr.X Посмотреть сообщение
Там только сказано, что значение этого макроса зависит от реализации.
В стандарте до С++11 сказано, что NULL - это всегда строго константное целочисленное выражение со значением 0. Поэтому свобода "зависит от реализации" тут сводится лишь к выбору 0, 0L, (2 - 2), false и т.п. но в конечном итоге обязательно NULL == 0.

После С++11 NULL больше нельзя определять через выражения, это всегда либо буквальный 0, либо nullptr.
0
29.12.2016, 18:28

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В стандарте до С++11 сказано
Тема 2010 года, тогда ещё не было с++11. :D
Во всяком случае полной спецификации, только заметки.

0
29.12.2016, 18:36

Не по теме:

GbaLog-, предлог "до" разве не об этом же говорит? :)

0
29.12.2016, 18:41

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
предлог "до" разве не об этом же говорит?
Проглядел... Уже дальше носа не вижу, работа оказалась не так проста, потому что меня с места в карьер кинули и сказали: "разбирайся, да поскорее".

0
29.12.2016, 18:43

Не по теме:

Цитата Сообщение от GbaLog- Посмотреть сообщение
работа оказалась не так проста, потому что меня с места в карьер кинули и сказали: "разбирайся, да поскорее".
То ли ещё будет...

0
29.12.2016, 18:54

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
То ли ещё будет...
На самом деле скажу, что меня не кидали на самые сложные проекты, сейчас дорабатываю кое-что там, но там сложность состоит не в том, чтобы добавить(я уже на самом деле добавил всё, что было нужно), а в том, чтобы протестировать, ибо надо для этого углубляться в сеть и вообще в запросы, которые посылает приложение и которые ему поступают.
Вот такие пироги. Вообще не то чтобы сложно, просто всего много и во всём надо разбираться. В объёме работ сложность! Ибо, насколько я понял, этот проект должен был завершиться до Нового года.
Ну ладно, хватит оффтопа, жаловаться пока что не на что, меня взяли на работу с++-программистом в 18 лет и без ВО, это чудо. :)

0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
29.12.2016, 19:39
Цитата Сообщение от Evg Посмотреть сообщение
Немного не так. По стандарту Си должно быть некоторое специальное значение указателя и чтобы ни один объект не мог иметь такой адрес. В заголовочных файлах такое значение должно быть описано как NULL. Если p - это некий указатель, то "if (p)" должно трактоваться как "if (p != NULL)". При этом стандарт не говорит, чему должен быть равен NULL. Для большинства "нормальных" систем NULL равен нулю. Но для некоторых процессоров это может быть не так. На сигнальных процессорах зачастую 0 является валидным адресом. Поэтому в качестве NULL может быть взято значение -1. У сигнальных процессоров мало памяти, а потому адрес 0xffff... как правило находится за рамками физической памяти процессора и поэтому удовлетворяет стандарту (т.е. не существует переменной или функции, адрес которой равен -1)
Когда-то #pragma искал примеры непереносимых кодов. Можно привести ещё пример. Предполагаем, что во всех трёх случаях делается сравнение с NULL

C
int *p;
if (p) .... * * * * /* переносимый */
if (p!=NULL) .... * /* переносимый */
if (p!=0) .... * * */* НЕ переносимый */
Ну и, соответственно, целочисленное значение, соответствующее NULL, можно присваивать в указатель любого типа без явного преобразования. В нашем случае NULL соотвествует нулю, а потому присваивание false отработало корректно. На вышеупомянутом сигнальном процессоре здесь так же произошла бы ошибка
Как выяснилось, это не так. Прошу прощения, что внёс смуту. Подробности в Что значит "NULL"?
4
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.12.2016, 19:39

действительно трудная задача может быть кто нибудь рискнет за это взяться
действительно трудная и стоящая задача но может быть кто нибудь рискнет за это взяться если кто нибудь сможет реализовать программный...

Кто объяснит почему true == false ?
Спасайте! а то я щас повешусь от взрыва мозга! Кто объяснит вот что это за фигня. Когда я в программе пишу: char a = 0x64; ...

Если bool name=false, то !name это true?
Добрый день! Привожу код, взятый из книги. Непонятны следующие строки bool found_one = false; строка 104 if( !found_one ) ...

Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы
Заранее спасибо.

Что это? .MainFormOnTaskbar := True; Тут ошибка False не помог
begin Application.Initialize; Application.MainFormOnTaskbar := True; Тут ошибка False не помог...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru