Buona sera,
mi accade una cosa bizzarra. Lo stesso codice viene compilato correttamente su Arduino, mentre su Esp 32 non viene compilato con tanto di errore. Il codice riguarda la const char*.
Qualcuno saprebbe spiegarmi il motivo?
ecco un esempio:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
const char* cp = {"char pointer"};
myfunction(cp);
}
void loop() {
// put your main code here, to run repeatedly:
}
void myfunction(char* pointer){
Serial.println(pointer);
}
E' vero che la scrittura non e' corretta, la funzione myfunction dovrebbe essere myfunction( const char*) ... pero' su arduino uno viene compiato senza errori.
ho fatto una ricerca, e ho trovato una discussione su github riguardo alla flag permissive, pare che sul core avr, per i puntatori, la permissive sia stata diabilitata per poter far funzionare librerie non scritte bene (sara' vero?). Pero' e' vero che nella funzione ricevente (sulla uno) posso tranquillamente variare una char che era const, e questo secondo me non dovrebbe accadere
cos'hai impostato come livello di segnalazioni ?
se metto "nessuno" si comporta come dici tu...se già metto "pochi" anche la UNO mi da un warning per il const char*.
@max_1312: che versione del "core" Arduino per ESP32 stai utilizzando? (se vai nel board manager e guardi cosa hai installato per ESP32 ti da la versione).
ciao Guglielmo, avevo fatto l'aggiornamento alla 3.x se non sbaglio 3.3. Ma il problema non riguarda il core esp 32, tant'e' che lo stesso errore esce su wokwy, ed e' giusto che sia segnalato l'errore. Il problema e che non esce lo stesso errore sul core arduino. Questo avviene su tutti i puntatori nn solo sui char*. In pratica la toolchain di arduino permette di convertire una const in variabile. Non sarebbe un grosso problema se non ci fosse l'ottimizzazione del compilatore che non assegna una nuova posizione se esiste un puntatore con lo stesso valore, quindi cambiando il valore di una const si rischia di cambiare anche il valore di tutti gli altri.
Mi sono accorto di questo mentre stavo programmando una libreria per gestire menu a scorrimento su un display 3.5" dove uso degli array di puntatori anche molto grandi.
Ho letto su github che questo sembra essere dovuto alla flag -fpermissive che di fatto declassa l'errore a warning per mantenere la compatibilita' con alcune vecchie librerie.
Non mi sembra una valida ragione. Sarebbe opportuno inserire l'opzione -Fpermissive nelle impostazioni dell'Ide.