da
xyz » 2 nov 2017, 21:17
Prima di tutto quando si riporta un errore di un compilatore C/C++ includere sempre il messaggio completo, compreso il numero di linea.
Il linguaggio C/C++ accetta solo come operatori i caratteri ASCII e non Unicode, quindi per indicare il meno si usa il carettere '-' e non questo '–'. Lo so sembrano uguali ma il primo carattere è ASCII:
- Codice: Seleziona tutto
U+002D HYPHEN-MINUS
UTF-8: 2d UTF-16BE: 002d Decimal: - Octal: \055
-
Category: Pd (Punctuation, Dash)
Unicode block: 0000..007F; Basic Latin
Bidi: ES (European Number Separator)
il secondo simile è Unicode:
- Codice: Seleziona tutto
U+2013 EN DASH
UTF-8: e2 80 93 UTF-16BE: 2013 Decimal: – Octal: \020023
–
Category: Pd (Punctuation, Dash)
Unicode block: 2000..206F; General Punctuation
Bidi: ON (Other Neutrals)
Esiste anche un altro errore, l'operatore decremento sono due caratteri meno in sequenza e non uno.
Quindi la patch di correzione è la seguente:
- Codice: Seleziona tutto
cifre [i] = Serial.read() – 48;
in
- Codice: Seleziona tutto
cifre [i] = Serial.read() - 48;
e
- Codice: Seleziona tutto
for (int n = i; n > 0; n–)
in
- Codice: Seleziona tutto
for (int n = i; n > 0; n--)
Aggiungo che in C/C++ come notazione le funzioni non hanno caratteri maiuscoli, quindi il nome "Make_int" stona.
L'uso della funzione "pow" è assolutamente da evitare con i numeri interi è lentissima e costosissima in termini di spazio di codice occupato e poi non funziona come sperato, gli interi nel GCC per gli AVR sono a 16 bit, non può rappresentare un numero a 8 cifre decimali. Consiglio di studiare meglio il C/C++ e API di Arduino, l'uso di variabili globali come passaggio di parametri è in generale da evitare.