реклама на сайте
подробности

 
 
> Банальный вопрос...(void*)0
promelectronshch...
сообщение Feb 16 2011, 16:33
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 8-11-10
Из: Украмна
Пользователь №: 60 714



Здравствуйте, помогите разобраться...
В многих проекта объявляется константа #define NULL (void*)0...
Зачем это делается? Мы как бы приводим тип указателя на 0 к типу void, зачем?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Xenia
сообщение Feb 16 2011, 16:58
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(promelectronshchic @ Feb 16 2011, 19:33) *
Здравствуйте, помогите разобраться...
В многих проекта объявляется константа #define NULL (void*)0...
Зачем это делается? Мы как бы приводим тип указателя на 0 к типу void, зачем?

Чтобы такой нулевой указатель компилятор принимал в качестве аргумента функций и не ругался на него.

Нулевой указатель частенько применяется в аргументах функций, когда данный параметр опускается (в смысле не нужен). Типа пустая затычка sm.gif. А для некоторых функций такой параметр может означать, что вместо нулевого адреса они могут взять адрес по умолчанию или из каких-то разумных соображений. Типа того, что если укажешь адрес буфера, то тебе в него что-то насыплют, а если не укажешь, но ничего не насыпют sm.gif. В последнем случае NULL работает как признак затребования опционных данных, которые отпускаются, когда под них приготовлена ёмкость. NULL - отсутствие такой ёмкости, отказ от опционных данных.

Хотя сейчас появилось довольно много С++ компиляторов, которые способны обычный 0 (цифру) автоматичеcки приводить к типу void*. Тогда определение NULL становится ненужным. А точнее, нужным только в чистом языке C. Хотя все-таки приятнее уметь отличать на глаз цифру 0 от нулевого указателя.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 16 2011, 18:20
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Xenia @ Feb 16 2011, 19:58) *
Хотя сейчас появилось довольно много С++ компиляторов, которые способны обычный 0 (цифру) автоматичеcки приводить к типу void*. Тогда определение NULL становится ненужным. А точнее, нужным только в чистом языке C. Хотя все-таки приятнее уметь отличать на глаз цифру 0 от нулевого указателя.

Из стандарта C99:
Цитата
6.3.2.3 Pointers
...
3 An integer constant expression with the value 0, or such an expression cast to type
void *, is called a null pointer constant.55) If a null pointer constant is converted to a
pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal
to a pointer to any object or function.
...
55) The macro NULL is defined in <stddef.h> (and other headers) as a null pointer constant; see 7.17.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 19:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016