Article View: be.comp.programming
Article #9681Re: CC probleem..
From: Andy Georges
Date: Wed, 10 Apr 2002 07:36
Date: Wed, 10 Apr 2002 07:36
82 lines
3275 bytes
3275 bytes
Hallo,
> Iemand een idee wat CC hier fout aan vindt en wat eraan te doen valt?...
wat er precies aan scheelt weet ik niet. Ik zou vermoeden dat de compiler in
staat is om te detecteren dat de arraygrootte at run time wordt bepaald en
dat hij dan ergens plaats alloceert. Nu, tenzij die plaats op de stapel
wordt gealloceerd lijkt me dat een onmogelijke opgave voor een compiler.
Misschien weigert CC gewoon om dergelijke dingen op de stapel te zetten.
Dus moet je die array op de heap alloceren, waarvoor een malloc (C) of een
new (C++) nodig is.
> Ik heb bv de procedure:
> void test(int dimensie)
> {
> double v[dimensie];
> }
Dus:
void test(int dimensie) {
double *v = new double [dimensie];
// body
delete v;
}
> En dat geeft als error:
> Error: An integer constant expression is required within the array
> subscript operator.
> g++ maakt hier geen probleem van.
Misschien omdat g++ dat wel op de stapel wil alloceren?
Dit is de output van g++ -S -O0 op een sparc: (overbodige stuff weggeknipt)
van het fragment:
1 void test(int dimensie) {
2
3 double v[dimensie];
4
5 }
Dus:
11 .LLCFI0:
12 !#PROLOGUE# 1
13 st %i0, [%fp+68]
14 mov %sp, %i1
15 ld [%fp+68], %i0
16 sll %i0, 3, %i0
17 add %i0, -8, %i0
18 add %i0, 8, %i0
19 add %i0, 7, %i0
20 srl %i0, 3, %i0
21 sll %i0, 3, %i0
22 sub %sp, %i0, %sp
23 mov %i1, %sp
24 ret
25 restore
Als ik het juist lees, dan wordt hier op de stapel dimensie*8 bytes voorzien
(%i0 bevat dimensie iirc) (op regel 22).
Hopelijk is deze uitleg een beetje correct, anders zou ik het graag horen.
mvg,
Andy
--
--
==========================================================================
Parallel Information Systems Group - Dept. ELIS - Ghent University
St. Pietersnieuwstraat 41, 9000 Ghent, Belgium
Phone: +32-9-264.33.67, Fax: +32-9-264.35.94
E-mail: andy.georges@elis.rug.ac.be
==========================================================================
Technical Details
Message-ID:
<a90q1u$734$1@inf6serv.rug.ac.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!easynews!news-xfer.newsread.com!bad-news.newsread.com!netaxs.com!newsread.com!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!feed.news.nacamar.de!newsfeeds.belnet.be!newsfeed.belnet.be!naxos.belnet.be!news.belnet.be!inf6serv.rug.ac.be!not-for-mailReferences:
<iuKs8.8678$Ze.2797@afrodite.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,12673ae89a2effe0 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-04-12 02:30:12 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!easynews!news-xfer.newsread.com!bad-news.newsread.com!netaxs.com!newsread.com!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!feed.news.nacamar.de!newsfeeds.belnet.be!newsfeed.belnet.be!naxos.belnet.be!news.belnet.be!inf6serv.rug.ac.be!not-for-mail From: Andy Georges <andy.georges@elis.nospam.rug.ac.be> Newsgroups: be.comp.programming Subject: Re: CC probleem.. Date: Wed, 10 Apr 2002 09:36:30 +0200 Organization: RUG - ELIS Lines: 82 Message-ID: <a90q1u$734$1@inf6serv.rug.ac.be> References: <iuKs8.8678$Ze.2797@afrodite.telenet-ops.be> NNTP-Posting-Host: escher.elis.rug.ac.be Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7Bit User-Agent: KNode/0.7.1