Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Наверное всё же не совсем так. Во-первых, в изначальном Си я... 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 как что-то конкретное - просто не рационально. Только если принимать решение о конкретном устройстве на этапе прекомпиляции. На то оно, в общем-то, и макрос. Это если думать с точки зрения АСМа.
|
|
|