информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Spanning Tree Protocol: недокументированное применениеСтрашный баг в Windows
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
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Это - стандарт ; 22.11.05 00:08  Число просмотров: 1622
Автор: kstati <Евгений Борисов> Статус: Elderman
Отредактировано 22.11.05 00:09  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
> А на что нацелен (void *)?
Сам по себе -- ни на что - это тип. А объект типа (void *) нацелен на область нетипизированных данных. Другими словами - на некую ячейку памяти, не контролируя длинны данных. Это немного другая песня ).
Например, sizeof(void * ) == sizeof(char * ) == sizeof(int * ) == sizeof(any_type * ) -- это ведь указатель. И, по сути, всё равно, куда он указывает. Он имеет фиксированный размер.
В то же время, пустая структура по логике вещей должна иметь нулевой размер, но, к сожалению эта логика нарушается. Хотя... с другой стороны, можно написать пустую функцию void func(void){}.
Бестолковое, конечно, это занятие, но работает (

> > malloc(sizeof(type)); при размере типа
> > равным нулю вернет значение NULL. Это создает
> > неоднозначность: можно ли использовать результат нуль, или
> > он появился вследствие невозможности выделения памяти.
> А по фигу.
В принципе, верно, но есть более точный вопрос. не можно ли, а нафиг?

Порылся-таки в стандарте. Каюсь. Надо было сразу глянуть, а не гадать. (ISO/IEC 14882)

9. Classes
[...]
A class-name is inserted into the scope in which it is declared immedaitely afret the class-name is seen. The class-nama is also inserted into the scope of the class itself. For purposes of access checking, the inserted class name is treated as if it were a public member name. A class-specifer is commonly referred to as a class defenition. A class is considered defined after the closing brace of its class-specifier has been seen even though its member functions are in general not yet defined.

Complete objects and member subobjects of class type shall have nonzero size. [Note: class objects can be assigned, passed as arguments to functions, and returned by functions (except objects of classes for witch copying has been restricted; see 12.8). Other plausible operators, such as equality comparsion can be defined by user; see 13.5)
[...]
Кратко - по-русски. В стандарте c++ заявлено, что классы могут быть пустыми, а их объекты всегда должны быть ненулевого размера. (напомню, что в c++ ключевыми словами объявления класса являюстся class, structure, union).

Так что, это является задокументированным стандартом для C++. Относительно си - не знаю.
<programming> Поиск 






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


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