Article View: be.comp.programming
Article #7985Re: [php] Vraagjes over variabelen
From: Dominique Devriese
Date: Thu, 11 Jul 2002 08:15
Date: Thu, 11 Jul 2002 08:15
92 lines
4620 bytes
4620 bytes
Nicolas Barbier <reply@in.group> writes:
> Dominique Devriese wrote:
> > Wat je met die "typedef" bedoelt ontgaat mij.
>
> als je bv in pascal het volgende doet:
>
> type verbruik: integer; { als mijn pascal totaal niet klopt is dat omdat
> het al zo lang geleden is :-) }
> var i: verbruik;
> j: integer;
> (..)
> i = j; { FOUT }
>
> dan geeft dat dus een fout omdat de types niet hetzelfde zijn. in C
> is dit
> perfect legaal, en daarom noemt men C een zwakker getypeerde taal
> (afaik).
Ah zo, ja, dat is idd nog een minder sterk getypeerd aspect van C.
>
> > C is minder streng getypeerd omdat je met casts van een char makkelijk
> > een integer kan maken e.d.
>
> dus als het "moeilijk" is om conversies te doen is een taal sterk
> getypeerd ? :-)
als ik in perl dit doe:
$a = "5 appels";
$b = $a + 4;
dan is $b een integer met waarde 9.
in C moet je expliciet de string $a omzetten naar een integer, voor je
hem als zodanig wil gebruiken:
char a[] = "5 appels";
int ai;
sscanf( "%d", a, &ai );
int b = ai + 4;
>
> > Unions zijn een apart geval, omdat je dezelfde geheugenruimte als
> > verschillende types kan gebruiken, wat tot problemen kan leiden.. Je
> > kan dus het onderscheid dat de compiler maakt tussen de types omzeilen,
> > wat niet zou mogen in een sterk getypeerde taal.
>
> dit lijkt me gewoon eerder een "zwak gedefinieerde" taal. dus maw je kan
> programma's schrijven die "undefined behavior" vertonen op runtime.
ehm.. nee, daar zit je fout, dat gedrag is perfect gedefinieerd, en
voorspelbaar, maar het is gewoon niet "clean", en het is te klasseren
onder "knoeien". C is, kort samengevat, een taal die je toelaat om te
knoeien. Dit is bijvoorbeeld perfect geldige C, en het is ook perfect
gedefinieerd:
struct A { double d; int i; };
int main()
{
A b;
*( (double*) &B ) = 18;
printf( "%lf", b.d );
};
dat geeft dus 18 als uitvoer. Dit weet je omdat C de geheugenlayout
van struct A definieert: dat is namelijk gewoon een double en een int
na elkaar geplaatst. Als jij het adres neemt van een struct A, het
interpreteert als een adres naar een double, en die double gebruikt,
dan ben je gewoon aan het werken met de double A::d. Dit bedoelde ik
met te zeggen dat het in C perfect toegelaten is om te knoeien, maar
dat het wel sterk getypeerd is als je zulke dingen niet doet.
>
> > Maar als je bij C die twee dingen niet gebruikt, dan heb je wel degelijk
> > een sterk getypeerde taal.
>
> de taal op zich verandert daar niet mee hoor :-)
C en C++ zijn zo'n flexibele en veelgebruikte talen omdat ze veel
verschillende stijlen van programmeren toelaten.
Pascal is een propere procedurieel georienteerde taal. Je kan een
pascal-programma perfect naar C vertalen, omdat je in C ook proper en
procedure-georienteerd kan schrijven. Wil jij echter meer knoeien met
pointers, casts e.d., dan kan dat in C, maar niet in vb. pascal. C++
is nog veel sterker op dat gebied, het ondersteunt
procedure-georienteerd, object-georienteerd, generisch programmeren,
en ook het C-stijl knoeien kan nog.
sjuus
domi
--
Dominique Devriese
http://users.pandora.be/frit/domi.gpg
Technical Details
Message-ID:
<87k7o2r878.fsf@living.pandora.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-01!sn-xit-08!supernews.com!pd2nf1so.cg.shawcable.net!residential.shaw.ca!news-out.spamkiller.net!propagator2-la!propagator-la!news-in.superfeed.net!newsfeed.gamma.ru!Gamma.RU!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<298oiusaharbp8t3c790rdjjsptoqmld8q@4ax.com> <LgWW8.1534$QS3.362@afrodite.telenet-ops.be> <KqZW8.44$IC6.2559@nreader1.kpnqwest.net> <pan.2002.07.11.00.37.27.534095.1718@in.group> <8765znmbba.fsf@living.pandora.be> <pan.2002.07.11.01.37.16.504677.1718@in.group>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,7012b8384dd2d599 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-07-11 01:20:18 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-01!sn-xit-08!supernews.com!pd2nf1so.cg.shawcable.net!residential.shaw.ca!news-out.spamkiller.net!propagator2-la!propagator-la!news-in.superfeed.net!newsfeed.gamma.ru!Gamma.RU!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail Sender: domi@living.pandora.be Newsgroups: be.comp.programming Subject: Re: [php] Vraagjes over variabelen References: <298oiusaharbp8t3c790rdjjsptoqmld8q@4ax.com> <LgWW8.1534$QS3.362@afrodite.telenet-ops.be> <KqZW8.44$IC6.2559@nreader1.kpnqwest.net> <pan.2002.07.11.00.37.27.534095.1718@in.group> <8765znmbba.fsf@living.pandora.be> <pan.2002.07.11.01.37.16.504677.1718@in.group> From: Dominique Devriese <fritmebufstek@pandora.be> Message-ID: <87k7o2r878.fsf@living.pandora.be> Lines: 92 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Thu, 11 Jul 2002 08:15:55 GMT NNTP-Posting-Host: 213.118.142.161 X-Complaints-To: abuse@telenet.be X-Trace: afrodite.telenet-ops.be 1026375355 213.118.142.161 (Thu, 11 Jul 2002 10:15:55 MET DST) NNTP-Posting-Date: Thu, 11 Jul 2002 10:15:55 MET DST Organization: Telenet Internet