lesto:
sì, non ricordavo la versione precisa ed ho generalizzato.
Il punto è che bisogna fare mooolta attenzione a dire che è C++, io direi che
è in pratica C con un pizzico di C++..
Ma quindi a parte l'errore che ho fatto di digitazione nella prima le 3 forme sono uguali?
bhe la seconda usa un array che ha vantaggi e svantaggi ma in linea di massima sì, sono equivalenti
Che io sappia questa forma è propria del C++ (non c'è nel C) come dice nid69ita
esatto, se compila funziona, vai tranquillo

Dunque, io ho già scritto riguardo il linguaggio di Arduino, poi di recente Astrobeed ha confermato ciò che andavo dicendo 2 anni addietro.
Le mie intenzioni sono quelle di fissare una volta per tutto delle verità inconfutabili:
Il compilatore usato da Arduino IDE è il ben noto avr-gcc ottenuto compilando gcc per architettura AVR. gcc è in grado di compilare molti linguaggi persino java, ada, objectiveC ecc, ovviamente la libreria standard C e la stdc++ devono essere adattate per ambiente embedded, quindi per AVR è stata sviluppata la avr-libc e manca un progetto per implementare la stdc++ embedded, manca perchè la stdc++ è immensa e molte cose lato embedded sarebbero inutili o poco funzionali o poco efficienti o.... insomma non c'è la sdtc++ per embedded, c'è però qualche libreria C++ che offre alcune funzionalità offerte dalla stdc++ lato PC, visto che le funzionalità di questa libreria C++ embedded non ricalca in modo fedele la sdtc++ sarebbe controproducente chiamarla allo stesso modo, cioè libstdc++.
Arduino IDE può compilare codice sorgente .c, .cpp, .c++, .s ecc, questo significa che se il sorgente ha estensione .c viene chiamato il compilatore C e il preprocessore C. La fase finale di "linkaggio" dei moduli compilati in formato oggetto avviene richiamando g++ con l'opzione per linkare codice C++.
Il C++ usabile con arduino è completo, ci sono anche i template.
Ma allora cosa manca:
Ci sono le eccezioni disabilitate, visto che una eccezione avviene a runtime avrebbe poco senso abilitarla, se abilitata la dimensione del compilato .ihex aumenta sensa poterne trarre vantaggio.
L'operatore new è disabilitato perchè manca la libreria standard C++, allora il team Arduino ha sopperito fornendo la gestione dello heap adatta a risorse limitate tramite l'operatore new e delete specifici.
Mancando le librerie stdc++ manca anche la gestione dei thread che normalmente si appoggia ai servizi di sistema, sistema che non esiste.
Altra mancanze potrebbero esserci, ma non ho indagato circa il binding dinamico perchè è lento sul PC figuriamoci su atmega a 16MHZ e si usa solo con le classi astratte e i metodi virtuali puri.
Il team Arduino ha ufficialmente scritto una cosa che porta fuori strada l'utente, sicuramente avrà buoni motivi per averlo fatto ma queste sono le conseguenze. L'incontro tra competenti e non competenti in questo modo viene a mancare e il dialogo si guasta, non solo chi sostiene il contrario di ciò che sostiente il team arduino non è credibile e si finisce sempre a dire le stesse cose.
Sono anche convinto che in questo modo l'utonto fa più fatica ad evolversi.
Ho uno strano senso di dejavu. 
Ciao