информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяСтрашный баг в WindowsSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 TeamViewer обвинил в своем взломе... 
 Docker Hub закрыл доступ из России 
 Google заблокировала 2 с лишним... 
главная обзор 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
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Уверен. Генерация кода вещь хотя и хрупкая, но не в данном... 10.03.05 14:22  Число просмотров: 2778
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
> Никто как бы и не удивлен тем, что информация о типах
> теряется при компиляции. Вообще то если кто не заметил, мы
> говорили не о том, что БУДЕТ РАБОТАТЬ (если бы вопрос
> ставился таким образом, достаточно было бы одного теста), а
> о том, что БОЛЬШЕ СООТВЕТСВУЕТ СТАНДАРТУ

> А ты уверен, что это не поменятеся в будущем? Чем ближе ты
> находишься к существующему стандарту, тем меньше
> вероятность, что комитет по стандартизации в будущем
> поломает твою программу.

Уверен. Генерация кода вещь хотя и хрупкая, но не в данном конкретном случае. Я не вижу более оптимальных вариантов для построения кода (хотя при сравнении float'а с нулём компилятор и строит хрень какую-то - cmp или test были бы и проще и эффективнее - но это я уже склонен списывать на баги Майкрософта).


> > отличаются только иструкцией je вместо jne. При этом
>
> А вот тут по фигу - кодогенерация весьма хрупкая штука (не
> в смысле что может сломаться, а в смысле что при малейшем
> телодвижении может давать совершенно другой код). А все
> потому, что оптимальная кодогенерация - NP-полная задача и
> для ее решения используются эвристические итерационные
> методы которые в пределе должны сходиться к оптимальному
> результату.
В теории. На практике всегда можно предугадать какой именно код построит компилятор. Естесственно, что он использует умные методы оптимизации, однако в таких вещах как я показал оптимизировать физически нечего.
Немного оффтоп, хотя и в тему, но вот вы писали в топике про ООП, что, мол, компилятор строит эффективный код, который часто не по силам человеку. http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=2&m=115940 - уже было подобное обсуждение. Да и то что я привёл с float'ом при сравнении с нулём опять же не тянет на "не по силам человекам". Я бы такое сравнение писал проще и лучше. Мелочь, но однако.

> > Си'шный тип (указатель/не указатель, char/не char)
> вообще
> > оказывается не существенным.
>
> А почему по твоему она называется статической типизацией (в
> отличие от динамической)?
Почему оно так называется понятно. Но что касается Си, то он уж через чур "статический". Хоть убейте, но я не понимаю зачем вообще разделять указатели. Какая разница, указывает он на int, char или вообще на другой указатель? Только что бы программист сам при программировании не запутался? Как-то это сомнительно.

Ну да про стандарт. Я решил обратиться по вопросу NULL'а к Страуструпу:

----------------
Ноль (0) имеет тип int. Благодаря стандартным преобразованиям (§ В.6.2.3), 0 можно использовать в качестве константы любого интегрального типа (§ 4.1.1), типа с плавающей точкой, указателя или указателя на член класса. Тип нуля определяется по контексту. Ноль, как правило (но не всегда), будет физически представлен в виде последовательности нулевых битов соответствующей длины.

Гарантируется, что нет объектов с нулевым адресом. Следовательно, указатель, равный нулю, можно интерпретировать как указатель, который ни на что не ссылается.

В языке С было очень популярно определять макрос NULL для представления такого нулевого указателя. Так как в С++ типы проверяются более жёстко, использование банального нуля вместо NULL приведёт к меньшим проблемам. Если вы чувствуете, что просто обязаны определить NULL, воспользуйтесь

const int NULL = 0;

Модификатор const (§ 5.4) предотвращает ненамеренное замещение NULL и гарантирует, что NULL можно использовать везде, где требуется константа.
----------------

Думаю, теперь все вопросы прояснились. NULL - нулевой указатель. Тип, на что именно NULL указывает, не важен. Просто указатель на ноль. Если для вас и Страуструп не стандарт, то я уж и не знаю :-)
<programming> Поиск 






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


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