Newsgroup: it.comp.lang.c++
Titolo: throw()

Ciao a tutti!
Guardando come funzionano le eccezioni in C++ ho trovato throw() che messo
dopo i parametri di una funzione dovrebbe specificare che questa funzione
non lancia eccezioni,in realtà al tentativo di lanciarne una viene chiamato
unexpected! Giusto?
Ora, io ho un piccolo programma che lancia l'eccezione quando viene fatto un
tentativo di divisione con denumeratore = a zero!, ma quando nella funzione
che lancia l'eccezione,metto throw() io mi aspettavo che catch non
intercettasse l'eccezione, ma che venisse chiamata unexpected, invece
funziona tutto come che non avessi messo throw()! Perchè?
Grazie!
Ciao
Francesco

Francesco Rossi wrote:

forse e` perche` usi VC++: questo "bel" compilatore si limita 
semplicemente ad ignorare le excpetion-specifications
ciao Anto
-- 
Antonio Cuni, 20 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 ciao Anto
Sapresti indicarmi un compilatore che non ignori le specifiche di eccezione
e che sia abbastanza "restrittivo"
con lo standard?


???
cavolo... davvero?
Il problema sussiste anche nella versione 6.0 suppongo... la M$ continua a
credere che i suoi standard siano gli unici a dover essere ritenuti
validi!!!
Un altro motivo di rabbia verso il vecchio Bill... GRRRRR
Prima che continuo a scrivere codice per VC++ utilizzando la libreria
standard, c'è qualcos'altro che dovrei sapere su 'sto caxxo di compilatore?
(ad esempio: nonostante settimane di lavoro non sono riuscito a capire cosa
aveva il mio *caro* compilatore C++ contro un dato membro di tipo
std::string dichiarato all'interno di una classe importata da una DLL...)

 ha scritto nel messaggio
news:LUoR8.55948$Kt3.1...@twister2.libero.it...

Non ti preoccupare il problema sussiste anche nella 6.0!
E tutti ringraziano!!!!!

 std::string dichiarato all'interno di una classe importata da una DLL...)
Niente, suppongo. Bisogna che non linki staticamente, oppure finisce che
allochi con una libreria e fai delete in un'altra (e in un altro heap...).
Sennò, basta che ignori  i warnings (the class does not have a
dll-interface, o qualcosa di simile).
Ciao,
zello

 con lo standard?
probabilmente il migliore e` il comeau c++, ma e` a pagamento. Gratis 
c'e` g++ 3.0.4, sotto linux.


 Gratis c'e` g++ 3.0.4, sotto linux.
io uso ancora il 2.95.4 perchč ho provato ad installare il 3.0.4 ed č
terribilmente lento (anche se devo ammettere che non mi sono per niente
sbattuto a cercare il perchč)...
-- 
Rhymes
rhy...@myself.com
" ride or die "

 c'e` g++ 3.0.4, sotto linux.
Perche' non 3.1?
Ciao,
Nicola

 Perche' non 3.1?
perche` mi ero dimenticato che era uscita la nuova versione e anche che 
avevo fatto l'upgrade :-)))
[anto@localhost anto]$ gcc -v
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/specs
Configured with: /usr/src/gcc-3.1/configure --enable-languages=c,c++
Thread model: single
gcc version 3.1


 sbattuto a cercare il perchč)...
come ha giustamente detto Nicola, prova il 3.1: e` decisamente piu` 
veloce.


 veloce.
si è quello che hanno detto anche a me ma sai col 56k il download...vedrò
di convincere il mio amico con l'ADSL :)


 compilatore?
Si.
Come mi pare di averti già detto il VC6 è PRECEDENTE allo Standard
del C++, per cui ha una serie di incompatibilità.
Passa al 
VC.NET
 dove dovrebbe essere notevolmente migliorata la
situazione.
...dovrebbe...
--
Gerolamo

 ha scritto nel messaggio
news:RPUQ8.50253$j65.1...@twister1.libero.it...

Allora, siete sicuri? Programmando in Java, pensavo che throw() significhi:
la funzione non lascia trapelare eccezioni, non la funzione non dovrebbe
creare eccezioni; quindi il catch è coerente, perché la funzione non ne
lascia trapelare; se non ci fosse il catch, quella eccezione genererebbe una
chiamata a unexpected. O no? Attendo chiarimenti. Grazie
--
Paolo Giarrusso
Per rispondere togliere solo "TOGLIMI" dall'indirizzo, non _spam.

chiamata a unexpected. O no? Attendo chiarimenti. Grazie
io ho sempre considerato il throw alla fine di una funzione come un
suggerimento al programmatore ... che e' da interpretare nel senso
la funzione puo' lanciare questo genere di eccezioni.
E' ovvio che se cmq la funzione nonostante specifichi che non lancia
un'eccezione.. chi la va ad utilizzare di sicuro non la ingloba in un
blocco try catch ...
void a(void) throw()
{
	throw 1;
}
void main(void)
{
	a();
}
.. tanto x esempio .. il compilatore non genera nessun genere di
errore per un codice del genere, ma e' ovvio che generera' un errore
xche' l'eccezione non e' stata catturata.. ma ovviamente nessuno se
l'aspettava.. visto che throw indica che non sara' lanciata nessuna
eccezione
Antonio

 la funzione puo' lanciare questo genere di eccezioni.
no, non e` un semplice "suggerimento"; se una funzione solleva una 
eccezione di tipo diverso da quelli dichiarati allora viene chiamata la 
funzione "unexpected", che di default fa abortire il programma.



wrote:

scrivi la funzione come se fosse throw() e non scrivere throw().