Newsgroup: it.comp.lang.c++
Titolo: Compilatore Comeau e warning sospetto.

Ciao a tutti,
ho provato il tryout del compilatore Comeau C++
http://www.comeaucomputing.com/tryitout/
con del codice di cui volevo verificare (per curiosita') l'aderenza allo 
standard e mi ha dato un warning su cui sinceramente ho qualche 
perplessita'.
Un esempio di codice che compilato col Comeau da' warning e' il seguente:
bool func()
{
/*/
return true;
/*/		<< riga 5
return false;
/**/
}
E il warning e' questo:
Comeau C/C++ 4.3.3 (Aug  6 2003 15:13:37) for ONLINE_EVALUATION_BETA1
Copyright 1988-2003 Comeau Computing.  All rights reserved.
MODE:strict errors C++
"ComeauTest.c", line 5: warning: nested comment is not allowed
   /*/
   ^
Mi accade abbastanza spesso di usare dei blocchi di commento come quello 
sopra, perche' aggiungendo o togliendo un asterisco commento uno o 
l'altro blocco di codice (non chiedetemi perche', e' abitudine, lo so 
che potrei usare #if o #ifdef, etc...)...
N.B. lo stesso warning viene dato (alla riga 7) anche nel caso in cui 
sia commentato il secondo blocco di codice cosi':
bool func()
{
/**/
return true;
/*/
return false;
/**/		<< riga 7
}
Mi chiedevo se effettivamente il warning sia corretto, se non altro 
perche' non vedo dove sia il nested comment.
-- 
Lo zio di Nicola e' un incompetente.
--
Roal Zanazzi

Ciao a tutti,
premessa: anche se il contesto da cui scaturisce la mia domanda e' 
relativo ad un compilatore specifico, la domanda va intesa come 
richiesta relativa a quanto specificato dallo standard C++ nel caso 
descritto nel seguito.
Ho provato il tryout del compilatore Comeau C++










Questo risultato e' definito dallo standard?


 
non si puo avere un commento dentro un altro commento;
credo ti segnali la lina sette perchè ne apri uno senza aver chiuso il 
precendete.
Ciao

 Lo zio di Nicola e' un incompetente.
Bada ai tuoi zii che io bado ai miei ;-)
Ciao,
Nicola

Lash ha scritto:

Uhm, mi fa male stare a casa dal lavoro, tendo a non svegliarmi...
Ok, in entrambi i casi riportati dal mio messaggio originale 
effettivamente il parser trova un inizio blocco commento (/*) PRIMA di 
trovare il fine blocco commento (che e' un carattere piu' avanti <g>).
Diciamo che il compilatore e' pignolo, ma non mi aspettavo niente di 
meno :-P.
Pero' mi rimane un dubbio.
Se alla linea 5 il parser trova un inizio blocco commento (ed essendo 
gia' in un commento lo segnala come nested comment) nei caratteri 1 e 2, 
e' corretto (secondo lo standard) che identifichi nei caratteri 2 e 3 un 
fine blocco commento?
Suppongo che sia corretto, considerando la fama del Comeau, la mia e' 
pu' che altro curiosita':
com'e' definita dallo standard la parte di grammatica relativa ai commenti?
bool func()
{
/*/
return true;
/*/		<< linea 5
return false;
/**/
}
Mi sa che mi conviene tornare al vecchio #if 0 ... #else ... #endif, e' 
decisamente meno ambiguo.
--
Roal Zanazzi

 
Il suddetto Nicola non sei tu, ovviamente (e poi non conosco un tuo zio, 
quindi non mi permetterei mai di giudicare).
Ma sicuramente conosci in qualche modo il suddetto zio. :-P
Non dico altro.
--
Roal Zanazzi

 com'e' definita dallo standard la parte di grammatica relativa ai commenti?
La grammatica non e' specificata, ma quel che segue e' tutto quello che
lo standard ha da dire sui commenti:
"2.7 Comments [lex.comment]
The characters /* start a comment, which terminates with the characters
*/. These comments do not nest. The characters // start a comment,
which terminates with the next new-line character. If there is a
formfeed or a vertical-tab character in such a comment, only
white-space characters shall appear between it and the new-line that
terminates the comment; no diagnostic is required. [Note: The comment
characters //,
/*, and */ have no special meaning within a // comment and are treated
just like other characters. Similarly, the comment characters // and /*
have no special meaning within a /* comment. ]"
Ciao,
Nicola

 
...pochino.
<prima o poi me lo devo comprare questo benedetto standard>
--
Roal Zanazzi