[Résolu] int char unsigned const ........

bonjour

les valeur stoker de

unsigned char est de 0 a 255
pour byte de 0 a 255

et

unsigned int est de 0 a 65535
pour word 65535

il y a réellement une incidence selon le quel on utilise ou les deux c'est les méme

et pour const jai un exemple

 uint32_t dureeEtatActuel() const

le const on peux le metre ou on veux
ex

int const 
const int

ou comme dans l exemple 1 ??

byte est un alias de uint8_t défini par Arduino (ça se fait dans Arduino.h) tout comme boolean est un alias de bool

typedef bool boolean;
typedef uint8_t byte;

le type word est aussi défini dans Arduino.h comme

typedef unsigned int word;

Les types font partie du langage, il y a ceux de bases (types fondamentaux) dont la longueur dépend de l'architecture et de quelques règles bien définies et depuis C++11 on a aussi des tailles fixes en octets.

pour const, sur un type simple comme un int, ce n'est pas important où vous le placez

Si vous commencez à avoir des pointeurs c'est une autre histoire, il faut lire de droite à gauche:

si vous dites

const int * maVariable;

alors maVariable est un pointeur (*) vers un entier (int) qui est constant (const). Le pointeur pourra être modifié, mais pas l'entier pointé

si vous dites

int const * maVariable;

alors maVariable est un pointeur (*) qui est constant (const) vers un entier (int).
ou encore si vous dites

int * const  maVariable;

alors maVariable est un constant (const) pointeur (*) vers un entier (int).
les deux sont identiques, Le pointeur ne pourra pas être changé mais l'entier pointé peut varier

enfin si vous dites

const int const * maVariable;

alors maVariable est un pointeur (*) qui est constant (const) vers un entier (int) qui lui aussi est constant (const). Dans ce cas, ni le pointeur, ni la valeur pointée ne peuvent être modifiés.

subtil, non ? :slight_smile:

quand on l'utilise dans les fonctions dans des objets et que l'on met const APRES le nom de la fonction, ça veut dire que cette fonction n'altère pas l'intégrité de l'objet, la mémoire le représentant ne change pas avant et après l'appel.

On dira qu'une fonction membre const ne peut pas modifier la valeur d'une variable membre de la classe et ne peut appeler aucune autre fonction membre qui ne serait pas constante.

Si vous essayez de compiler cela:

class uneClasse
{
  public:
    int valeur;

    void maFonction() const
    {
      valeur = 100;        // erreur de compilation, on essaye de modifier l'objet
    }
};

void setup() {}
void loop() {}

vous aurez une erreur à la compilation

[color=orange][b].../sketch_feb08c.ino: In member function 'void uneClasse::maFonction() const':
sketch_feb08c:8:16: error: assignment of member 'uneClasse::valeur' in read-only object
       valeur = 100;        // erreur de compilation, on essaye de modifier l'objet
                ^~~
exit status 1
assignment of member 'uneClasse::valeur' in read-only object[/b][/color]

pas facile j'ai du relire plusieur fois mes j'ai compris merci J-M-L :slight_smile: