информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяГде водятся OGRыЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Наверное всё же не совсем так. Во-первых, в изначальном Си я... 09.03.05 01:27  Число просмотров: 2609
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
> Я могу ошибаться, но по-моему, отрицание любого указателя
> автоматически ведёт к его преобразованию в bool (даже в
> чистом C, по Стандарту 99 года) и после этого применению
> отрицания.
Наверное всё же не совсем так. Во-первых, в изначальном Си я вообще не помню, что бы был как-то явно определён bool. Ну а потом если рассмотреть как с этим со всем работает процессор: что есть bool? Логическое значение "истина/ложь". Однако на уровне процессора тип данных с "минимальным размером" это один байт. На практике проверка любого условия - это JMP куда-то. Нужем этот самый JMP или нет проверяется исходя из флагов. Видимо, сравнение с NULL это что-то вроде:

CMP ptr, 0; здесь перед нулём
;при необходимости надо дописать
;dword ptr или что требуется -
;я так понимаю, что компилятор это решает
;ещё до компиляции и не суть важно, что там
;написано - NULL или "0"
JE destination

В случае же отрицания указателя должно быть так (по идее):

NOT ptr
CMP ptr, 0
JNE destination

Ну а как именно определён NULL - чёрт его знает. Скорее всего, как мне кажется, точно я не могу утверждать, - это решается ещё до построения экзешника исходя из соображений оптимизации. Это было бы самым рациональным.

Ну а в MSDN написано: NULL is the null-pointer value used with many pointer operations and functions. Это описание (от и до) именно для Си. Видимо, даже в мелкософте точно не могут сказать, как оно устроено :) Хотя лично мне так кажется, что определять NULL как что-то конкретное - просто не рационально. Только если принимать решение о конкретном устройстве на этапе прекомпиляции. На то оно, в общем-то, и макрос. Это если думать с точки зрения АСМа.
<programming> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach