История изменений
Исправление hateyoufeel, (текущая версия) :
Так в этом-то и проблема: ты вообще не понимаешь, что ты делаешь.
Нет это ты чего-то не понимаешь. А у меня всё работает.
Ага. Типичный сишник :DDDDD
Главное, про неправильные компиляторы побольше пиши.
Задачи «чтоб код компилировался где угодно и чем угодно» в большинстве случаев изначально нет. Но когда она есть - требования к коду меняются, да.
У кого не стоит? Типичный случай: берёшь стороннюю сишную библиотеку, чтобы не писать велосипеды с нуля, а она с твоей версией компилятора сыпется в пух и прах, потому что автор – тоже типичный сишник и у него всё работает (c).
После чего выкидываешь этот говноязык вместе с его говнобиблиотеками и пишешь спокойно на каких-нибудь Rust, Go или вообще хачкелле.
А… так в C вообще не написано ничего про битовое представление указателей. Оно может быть вообще любым. Но при выводе на печать там всё равно будет 0, потому что каст к инту.
Битовое представление это тот адрес, по которому будет произведена попытка чтения при разыменовании. И для NULL там подставлялся заведомо недоступный адрес (какое-нить 0xEEEE0000), в то время как настоящий нулевой адрес был доступен для чтения/записи и программу при разыменовании не крашил. Куда там тайпкастился при этом указатель на настоящий ноль (не NULL) я не помню, вероятно тоже в 0. Практика сомнительная, поэтому сейчас её даже с читаемым нулём не используют насколько я знаю.
Блаблаблаблабла…
В стандарте C написано, что константа NULL должна быть эквивалентна (void*)0
и при касте к численному типу должна приводится к нулю в этом типе. Если у тебя NULL равен чему-то ещё, то эта реализация не соответствует стандарту языка.
Исходная версия hateyoufeel, :
Так в этом-то и проблема: ты вообще не понимаешь, что ты делаешь.
Нет это ты чего-то не понимаешь. А у меня всё работает.
Ага. Типичный сишник :DDDDD
Главное, про неправильные компиляторы побольше пиши.
Задачи «чтоб код компилировался где угодно и чем угодно» в большинстве случаев изначально нет. Но когда она есть - требования к коду меняются, да.
У кого не стоит? Типичный случай: берёшь стороннюю сишную библиотеку, чтобы не писать велосипеды с нуля, а она с твоей версией компилятора сыпется в пух и прах, потому что автор – тоже типичный сишник и у него всё работает (c).
А… так в C вообще не написано ничего про битовое представление указателей. Оно может быть вообще любым. Но при выводе на печать там всё равно будет 0, потому что каст к инту.
Битовое представление это тот адрес, по которому будет произведена попытка чтения при разыменовании. И для NULL там подставлялся заведомо недоступный адрес (какое-нить 0xEEEE0000), в то время как настоящий нулевой адрес был доступен для чтения/записи и программу при разыменовании не крашил. Куда там тайпкастился при этом указатель на настоящий ноль (не NULL) я не помню, вероятно тоже в 0. Практика сомнительная, поэтому сейчас её даже с читаемым нулём не используют насколько я знаю.
Блаблаблаблабла…
В стандарте C написано, что константа NULL должна быть эквивалентна (void*)0
и при касте к численному типу должна приводится к нулю в этом типе. Если у тебя NULL равен чему-то ещё, то эта реализация не соответствует стандарту языка.