#define #ifdef #endif HELP!

Salve a tutti, sto preparando un progragramma per arduino UNO.

Nel codice devo compilare se sono definite certe costanti, quindi ho #define WIND se do definito WIND devo dichiarare delle variabili globali, quindi #ifdef WIND #endif con all'interno la dichiarazione delle variabili.

posto un pezzo di codice:

///definisce gestore
// #define WIND
// #define TIM
// #define TRE
// #define VODAFONE

//definisce se c'è FTP
#define FTP

//Definizione parametri Gestore
#ifdef WIND
	char APN='internet.wind';
	char CentroSMS='+393205858500';
#endif
#ifdef TIM
	char APN='ibox.tim.it';
	char CentroSMS='+393359609600';
#endif
#ifdef TRE
	char APN='tre.it';
	char CentroSMS='+391231223123';
#endif
#ifdef VODAFONE
	char APN='mobile.vodafone.it';
	char CentroSMS='+393492000300';
#endif

Se commento WIND, TIM, VODAFONE eTRE il compilatore non mi da errori, ma se decomento uno dei 4 il compilatore da un casino di errore all'interno della unzione setup.

Dove è l'errore?

grazie

Ciao, tralascio la parte burocratica della mancata presentazione :slight_smile:
Che errori ti da? A me compilando con la 1.6 non da errori, li da solo se decommento più di una define (ovviamente).
In ogni caso il codice scritto non è corretto, il tipo di dato char può ospitare un solo carattere ( http://arduino.cc/en/Reference/Char ) quindi devi rivedere come istanziare correttamente le variabili che ospitano i parametri di connessione definento un arry di char.
Ciao

erdirectoor:
Salve a tutti,

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

erdirectoor:
Se commento WIND, TIM, VODAFONE eTRE il compilatore non mi da errori, ma se decomento uno dei 4 il compilatore da un casino di errore all'interno della unzione setup.
Dove è l'errore?

"char APN='ibox.tim.it';", e tutti gli altri, non è una assegnazione dato valida, o usi String, da evitare se possibile, oppure definisci un array di char e assegni i singoli elementi in questo modo:

char mystring[] = { 'H', 'e', 'l', 'l', 'o', '\0' };

Al posto di hello metti la tua stringa, l'ultimo elemento \0 serve per terminare l'arry di caratteri ed è obbligatorio metterlo.

erdirectoor:
Dove è l'errore?

Come detto anche da @fabpolli e @astro, le stringhe in C devi racchiuderle nei doppi apici e non singoli:

char APN[]="internet.wind";

nid69ita:
Come detto anche da @fabpolli e @astro, le stringhe in C devi racchiuderle nei doppi apici e non singoli:

char APN="internet.wind";

Ciao nid69ita,
non vorrei dire una cavolata ma non è un problema di apice singolo o doppio, è proprio la dichiarazione che è errata, non so se con i doppi apici il compilatore trasforma il tipo ma credo che la soluzione più pulita sia comunque quella di astrobeed

nid69ita:
Come detto anche da @fabpolli e @astro, le stringhe in C devi racchiuderle nei doppi apici e non singoli:

char APN="internet.wind";

Non è una dichiarazione valida, se scrivi char pippo per il compilatore è una variabile di tipo char a singolo byte e se gli assegni una stringa si arrabbia, al limite dovresti fare String pippo = "quellochetipare", però poi il tipo string porta problemi di conversione in *char.
La dichiarazione corretta, vale solo in fase di creazione della variabile, è quella che ho postato io, se devi modificare un arry di char o usi le apposite funzioni oppure devi scrivere i singoli elementi uno per uno, che poi è quello che le funzioni di libreria per la manipolazione degli array di char.

fabpolli:
Ciao nid69ita,
non vorrei dire una cavolata ma non è un problema di apice singolo o doppio, è proprio la dichiarazione che è errata, non so se con i doppi apici il compilatore trasforma il tipo ma credo che la soluzione più pulita sia comunque quella di astrobeed

Sorry, errore mio, ho dimenticato le parentesi quadre:
char APN[]="internet.wind";

@astro, mica devi passare ogni singolo char, come ho scritto qui sopra, lo accetta e mette in automatico il fine stringa '\0'. Che poi equivale a dichiararlo con un pointer:
char *APN="internet.wind";