gcc v3.0.1 vs gcc v2.95.3 -- KDE 2.2.1

Vasilis Vasaitis vvas at hal.csd.auth.gr
Sun Dec 2 02:08:01 EET 2001


On Sat, Dec 01, 2001 at 11:29:04PM +0200, v13 at priest.com wrote:
> 
> Desto ligo kalytera:
> 
> $ cat a.cc
> int main(int n) {}
> void main(char *p) {}
> 
> $ cat b.cc
> int mmmm(int n) {}
> void mmmm(char *p) {}
> 
> $ g++ a.cc -o a -c
> a.cc:2: `main' must return `int'
> a.cc: In function `int main(...)':
> a.cc:2: declaration of C function `int main(...)' conflicts with
                         ^^^^^^^^^^
> a.cc:1: previous declaration `int main(int)' here
> 
> $ g++ b.cc -o b -c
> $ 
> 
> Gia eksigise moy thn diafora sta 2 parapano.. 
> Gia na apofygoyme askopa mail (Symfona me tis apantiseis poy pira
> sto proigoymeno):
> 
> 1) Einai C++ kai oxi C
> 2) Einai aplo overloading
> 3) O skopos toy parapano DEN einai na ftiaksei ektelesimo,
>    alla bibliothiki, h opoia na periexei thn synartisi main
>    (leme tora.. gia tis anagkes toy paradeigmatos)

  Αμάν, τόση φασαρία γι' αυτό το πράγμα...

  Ο compiler στο λέει ξεκάθαρα: η main() είναι συνάρτηση C και όχι C++. Αυτό
είναι λογικό κι επόμενο να συμβαίνει, καθώς τα runtime περιμένουν μία C
συνάρτηση (αφού είναι κοινά λίγο πολύ για όλες τις γλώσσες του GCC) με όνομα
main (και όχι κάτι σαν _Ζ4maini, που θα δημιουργούσε το name mangling της
C++). Εφόσον λοιπόν είναι C συνάρτηση (βλ. το 1), δεν μπορεί να φάει
overloading (βλ. το 2). Το 3 είναι μάλλον εκτός θέματος.

  Για να επιβεβαιώσεις αυτό που λέω, πρόσεξε ότι το παρακάτω σκάει ακριβώς
για τον ίδιο λόγο με το a.cc που παραθέτεις:

$ cat c.cc
extern "C" int foo(int) {}
extern "C" void foo(char*) {}

  Α και, για να μην κακολογείτε όλη την ώρα τον GCC 3.0.x, ούτε ο g++ του
GCC 2.95.x κάνει compile στην συγκεκριμένη περίπτωση (ναι, τους έχω
εγκατεστημένους και τους δύο).

-- 
Vasilis Vasaitis
vvas at hal.csd.auth.gr

"When he was six he believed that the moon overhead followed him.
By nine he deciphered the illusion, trading magic for fact. No tradebacks.
So this is what it's like to be an adult..."
		-- Ed Vedder





More information about the Linux-greek-users mailing list