Newsgroup: it.comp.lang.c++
Titolo: Overloading delle funzioni e compilazione

(Sperando di non essere OT...)
Salve a tutti,
Sto studiando come un compilatore cpp, distingue le funzioni
sovraccariche e no.
Il mio testo di riferimento (deitel) indica come esempio il Borland C++
5.6.4.
La codifica dei nomi delle funzioni in gioco sono le seguenti (la lista
non è completa):
===========================
@square$qi
@square$qd
@nothing1$qifcri
@nothing2$qcifrdr
_main
===========================
facendo un raffronto con le funzioni in gioco:
===========================================================
@   square $q i
int square( int x )
@      square $q d
double square( double y )
@    nothing1 $q i      f        c       ri
void nothing1( int a, float b, char c, int &d )
@   nothing2 $q c      i        fr         dr
int nothing2( char a, int b, float &c, double &d )
===========================================================
Spulciando con un editor l'output del mio/nostro g++, ho notato,
ovviamente, delle modifiche, e cioé:
===========================================================
_Z6 square    i
int square( int x )
_Z6    square    d
double square( double y )
_Z8  nothing1   i       f       c        Ri
void nothing1( int a, float b, char c, int &d )
_Z8 nothing2    c       i       Rf        Rd
int nothing2( char a, int b, float &c, double &d )
===========================================================
Mi sfugge il significato e l'uso delle _Z6 et similia. Mi sapreste dare
un chiarimento? Grazie a tutti.


Per induzione, presumo che il numero dopo la Z indichi la lunghezza 
dell'identificatore.
Infatti nel caso del compilatore Borland, mi sembra che una funzione il 
cui nome sia "fun$qi" dovrebbe creare dei problemi.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

cui nome sia "fun$qi" dovrebbe creare dei problemi.
Quindi anche chiamando la mia funzione "_Z6squarei" avrei problemi?
Provo a verificare empiricamente. E grazie per la puntuale risposta.

 Quindi anche chiamando la mia funzione "_Z6squarei" avrei problemi?
Perchč?
int _Z6squarei( int x )
Dovrebbe darti semplicemente _Z10_Z6squareii

 Dovrebbe darti semplicemente _Z10_Z6squareii
In ogni caso, gli identificativi che iniziano con '_' seguito da una 
lettera maiuscola sono riservati (cfr. [17.4.3.1.2]).
Max

Avete ragione. Ho provato empiricamente e ho avuto lo "stesso"
risultato.
Una domanda:a cosa ti riferisci con: "iniziano con '_' seguito da una
lettera maiuscola sono riservati (cfr. [17.4.3.1.2])."???
Grazie.

 lettera maiuscola sono riservati (cfr. [17.4.3.1.2])."???
Significa esattamente quello che ha detto.
Il riferimento è allo standard del C++:
17.4.3.1.2 Global names
Certain sets of names and function signatures are always reserved to the 
implementation:
- Each name that contains a double underscore (_ _) or begins with an 
underscore followed by an upper-case letter (2.11) is reserved to the 
implementation for any use.
- Each name that begins with an underscore is reserved to the 
implementation for use as a name in the global namespace.

 Il riferimento è allo standard del C++
Scusami il refuso: intendevo scrivere "a quale testo fai riferimento".
Grazie per la risposta.

 cui nome sia "fun$qi" dovrebbe creare dei problemi.
Una funzione con questo nome dovrebbe avere problemi con qualsiasi
compilatore perche' il segno '$' non e' ammesso negli identificatori.
Ciao,
Nicola


Non e' cosi'.
Ci sono almeno due compilatori, il Visual C++ e il gcc per x86, che come 
estensione accettano identificatori contenenti il carattere "$".
Per entrambi i compilatori, il comportamento di default e' quello 
esteso, e si deve specificare un'opzione per ottenere un errore (/Za per 
VC++ e -ansi per gcc).
