🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #268156

Re: Ciemna strona C++

#268156
From: Tomasz bla Fortuna
Date: Thu, 15 Nov 2007 01:27
74 lines
4228 bytes
Dnia Thu, 15 Nov 2007 00:32:51 +0000 (UTC)
Sektor van Skijlen <ethouris@guess.if.gmail.com.is.valid.or.invalid>
napisał(a):

> > No i wewnątrz funkcji zamiast do member drugiego elementu tablicy
> > funkcja dostaje się do member2 pierwszego elementu tablicy. Może
> > niespecjalnie mnie to dziwi (i dlatego też myślę, że "działa dobrze"
> > może oznaczać, że psuje się jak powinno), ale szkoda, że nawet
> > warninga nie ma...
> 
> Moment - na co przepraszam chcesz mieć warning?
Było by fajnie dostać po głowie za, chociażby, upcastowanie
wskaźnika na tablicę obiektów. Albo za użycie [] na wskaźniku obiektu,
który znajduje się w jakiejś hierarchii obiektów.

Abstrahuję od realizowalności takiego warninga.
> 
> Zdecyduj ty się może, czy przekazujesz pojedynczy obiekt, czy
> przekazujesz wskazanie na pojedynczy element tablicy
Wskazanie na pierwszy element tablicy - jej początek. Funkcja może
nawet za argument brać struct bar x[], co nic nie zmieni.

> (i, co ważniejsze, wiesz na pewno, że za nim znajdują się w tej
> tablicy jeszcze co najmniej dwa elementy).
Ilość elementów nie gra roli -- ją mogę przekazać jako drugi parametr
lub jako NULL pod ostatnim adresem tablicy.

> Oczywiście, nikt nie będzie zaprzeczał, że zunifikowanie iteratora do
> tablicy z wskaźnikiem na pojedynczy obiekt, jest poważną wadą -
> istnieje jednak od początków języka C i jak zatwierdzano standard,
> nikt nie widział w tym żadnego problemu.
Pytanie czy właśnie nie powinien widzieć. ;) (Mówię o standardzie C++,
w C - ok)

> A C++ nie był w stanie
> niczego z tym zrobić. W C++ i tak jest duży postęp przez to, że nie
> można domyślnie konwertować niespokrewnionych wskaźników.
"No jest zepsute. Ale przecież mogło być znacznie gorzej"

> 
> > Czy metodologię testowania mam zepsutą? ;/
> 
> W przypadku języka C, faktycznie, nie jesteś w stanie ustrzec się
> takiego błędu.
W C takiego błędu by nie było. W C bym nie upcastował nigdy wskaźnika
na klasę. Bo.. no nie ma klas. Jeśli funkcja dostaje wskaźnik do
tablicy elementów A typu T i jej wielkość to A[0] to pierwszy
element, a A[1] to drugi element, a nie dalszy kawałek A[0], który
okazał się być jednak innego typu niż T.

A nawet jakbym rzutował w C większe structy na mniejsze to nie jest to
tak naturalne jak w C++ upcasting. W Idealnych warunkach ten przykład
nie powinien się skompilować bez zastosowania reinterpret_cast<>.

> Ciesz się, jeśli kompilator rzuci warning, że
> konwertujesz różne typy wskaźnikowe (bo nie musi rzucać - w ANSI C
> nie jest to błąd).
A to inna sprawa jest.

> W przypadku C++ można się tego ustrzec o tyle, o ile się będzie
> pamiętać, żeby nie stosować operatora [] na typie X* - jeśli się
> miało na myśli tablicę, należy jawnie napisać, że chodzi o iterator.
> W takim przypadku przynajmniej nie będzie można takiego programu
> skompilować.
No tak. Jedyny problem jest taki, że można zrobić tak jak w tym kodzie i
nikt nas (prócz segmentation fault) nie poinformuje, że zrobiliśmy
cokolwiek źle.

Pozdrawiam.
-- 
Tomasz bla Fortuna
jid: bla(at)af.gliwice.pl
pgp: 0x90746E79 @ pgp.mit.edu
www: http://bla.thera.be
Technical Details
Message-ID: <20071115022727.5a697635@Vorago>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!polsl.pl!not-for-mail
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <20071106002442.aebf0037.sulsa@dontmail.me> <fgqpbs$9cu$1@news.vectranet.pl> <20071107012633.3efe623d@Vorago> <fhg43j$b4s$1@kujawiak.man.lodz.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!polsl.pl!not-for-mail
From: Tomasz bla Fortuna <bla@thera.be>
Newsgroups: pl.comp.lang.c
Subject: Re: Ciemna strona C++
Date: Thu, 15 Nov 2007 02:27:27 +0100
Organization: Politechnika Slaska, Gliwice
Lines: 102
Message-ID: <20071115022727.5a697635@Vorago>
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <20071106002442.aebf0037.sulsa@dontmail.me> <fgqpbs$9cu$1@news.vectranet.pl> <20071107012633.3efe623d@Vorago> <fhg43j$b4s$1@kujawiak.man.lodz.pl>
NNTP-Posting-Host: afdns.sownet.pl
Mime-Version: 1.0
X-Trace: polsl.pl 1195089880 10344 195.82.188.30 (15 Nov 2007 01:24:40 GMT)
X-Complaints-To: news@polsl.pl
NNTP-Posting-Date: Thu, 15 Nov 2007 01:24:40 +0000 (UTC)
X-Newsreader: Claws Mail 3.0.2 (GTK+ 2.12.1; x86_64-pc-linux-gnu)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit