View Single Post
Old 05-07-2014, 09:43   #39
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12823
Quote:
Originariamente inviato da van9 Guarda i messaggi
La dimensione a zero non è mai stata valida per lo standard - un compilatore (no estensioni ovviamente) che non emette un warning in questo caso è da buttare. La dimensione ad uno è legale, ma invoca undefined behavior quando vai ad accedere oltre il primo elemento e se le ottimizzazioni sono attive può accadere di tutto. La cosa giusta è "char variable_message[];" usando C99. Se C99 non è un'opzione si usa la dimensione ad uno ma è meglio controllare cosa combina il compilatore.

C and C++, where (almost) everything is not what it seems...
Ho provato su Debian 7 con GCC 4.7 e con i flag -Wall -Wextra non riporta nulla (non ho dovuto neanche passargli std C99).

Ora giusto per curiosità provo sulle ultime versioni di clang e Visual Studio 2013 .

Edit: neanche Visual Studio si lamenta (sempre abilitando tutti i Warning), sarà perché usa un compilatore C++.

Edit2: neanche llvm 3.4, sempre passando -Wall -Wextra.

In pratica possiamo buttare tutti i compilatori esistenti .

Ultima modifica di WarDuck : 05-07-2014 alle 09:54.
WarDuck è offline   Rispondi citando il messaggio o parte di esso