J'étudie le code de l'exemple de rbb_server de la bibliothèque de ENC28J60 pour Arduino (je mettrais le lien ici si je pouvais) et je l'ai remarqué ce morceau bizarre de code:Comment PSTR peut-il recevoir plusieurs chaînes non séparées par des virgules?
static word homePage() {
long t = millis()/1000;
word h = t/3600;
byte m = (t/60) % 60;
byte s = t % 60;
bfill = ether.tcpOffset();
bfill.emit_p(PSTR(
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n"
"\r\n"
"<meta http-equiv='refresh' content='1'/>"
"<title>RBBB server</title>"
"<h1>$D$D:$D$D:$D$D</h1>"),
h/10, h%10, m/10, m%10, s/10, s%10);
return bfill.position();
}
Comment cela peut-PSTR (........) compiler si les chaînes n'ont même pas une virgule qui les sépare?
Je l'ai regardé pour cette PSTR définition de macro et je l'ai trouvé ceci:
Used to declare a static pointer to a string in program space. */
# define PSTR(s) ((const PROGMEM char *)(s))
#else /* !DOXYGEN */
/* The real thing. */
# define PSTR(s) (__extension__({static char __c[] PROGMEM = (s); &__c[0];}))
#endif /* DOXYGEN */
que vous pouvez trouver dans le fichier pgmspace.h quelque part dans le dossier IDE Arduino.
Comment cela peut même compiler ??
Merci!