Ceci est une ancienne révision du document !
Table des matières
Pointeur
Pointeur invalide : adresse “poison” 0xDEADBEEF
.
Données
Explication du padding / align : The Lost Art of Structure Packing Archive v2.2 du 19/12/2019 le 06/03/2020
Attribute
__attribute__((const)) vs __attribute__((pure))
Many functions have no effects except the return value and their return value depends only on the parameters and/or global variables
Many functions do not examine any values except their arguments, and have no effects except the return value.Using the GNU Compiler Collection, Archive
Les deux n'ont pas le droit de modifier quoi que ce soit en dehors de la fonction.
pure
a accès aux arguments et aux variables globales et peut déréférencer à pointeur alors que const
n'a accès qu'aux arguments et ne peut pas déréférencer un pointeur.
__attribute__((weak))
Définir une variable (globale) ou une fonction avec un attribut weak
indique au lieur un lien faible. Si le même symbole (sans weak
) est trouvé par le lieur, c'est celui-là qui le remplacera.
Il est aussi possible de définir un prototype ou la déclaration d'une variable extern
en weak
. Dans ce cas, si le symbole n'est pas défini (avec ou sans l'attribut weak
), le lieur ne posera pas de problème (pas de undefined reference to
) et considérera que le symbole est à l'adresse null
(attention aux pointeurs null).
extern const unsigned char __attribute__((weak)) variable; // Numéro de l'automate const unsigned char __attribute__((weak)) variable = 1; const unsigned char variable = 2;
Passage par référence d'un tableau dans une fonction
int & tab[10]
n'est pas la bonne syntaxe à cause de la priorité des opérateurs. La bonne syntaxe est :
int (& tab)[10]
Manipulation des bits
Lever un bit :
nbyte |= (1 << 4);
Descendre un bit :
nbyte &= ~(1 << 4);