🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #9681

Re: CC probleem..

#9681
From: Andy Georges
Date: Wed, 10 Apr 2002 07:36
82 lines
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-mail
References: <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