Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Langage C++
  3. Précisions sur les variables, attributs
Extrait - Langage C++ De l'héritage C au C++ moderne (avec programmes d'illustration) (2e édition)
Extraits du livre
Langage C++ De l'héritage C au C++ moderne (avec programmes d'illustration) (2e édition) Revenir à la page d'achat du livre

Précisions sur les variables, attributs

Précisions sur les variables

1. Visibilité et durée de vie d’une variable

L’écriture des fonctions renvoie à la visibilité et la durée de vie des variables dans un programme. Les règles sont les mêmes en C et C++.

Une variable est visible dans le bloc dans lequel elle est déclarée et dans tous ses sous-blocs. Elle n’est pas accessible dans les blocs au-dessus ni dans d’autres blocs séparés, y compris ceux des fonctions. Sa durée de vie est celle du bloc dans lequel elle est déclarée.

Si la variable est déclarée hors bloc, c’est-à-dire au niveau 0 du fichier, elle est visible dans tout le fichier à partir de sa déclaration. C’est ce qui est appelé une variable globale.

Expérimentation :

#include <iostream> 
 
int G = 0;  // visible dans tout le fichier 
 
int main() 
{ 
    int a = 5; 
 
    //sous-bloc 
    if(rand()%2) { 
        a++;             // visible 
        int b = 10; 
 
        //sous-sous-bloc 
        if(rand()%2) { 
            int c = 20; 
            a++;         // visible 
            b++;         // visible 
        } // fin c 
 
        //sous-sous-bloc...

Attributs

Depuis C++11, le C++ propose la spécification d’attributs et de séquences d’attributs.

1. Principe et syntaxe

Les attributs interviennent à la compilation. Ils indiquent dans un programme des caractéristiques, des options ou des critères particuliers qui interviennent à la déclaration d’un type, d’un objet ou dans une séquence de code. Chaque attribut est identifié par un nom défini selon l’implémentation.

La syntaxe décline plusieurs possibilités :

1) attribut unique :

[[ attribut ]] 

Exemple

[[noreturn]] 

2) liste d’attributs, ils sont séparés par une virgule :

[[ attrib1, attrib2, attrib3  ]] 

3) des arguments peuvent être ajoutés à un attribut

[[ attrib1, attrib2(liste arguments)  ]] 

Exemple

[[deprecated("because")]] 

4) Un attribut peut être situé dans un namespace :

[[ namespace:: attrib(liste arguments)  ]] 

Exemple

[[CC::opt(1), CC::debug]] 

Un using est utilisable lorsque plusieurs attributs sont dans le même namespace :

[[ using namespace : liste attributs ]] 

Exemple

[[using CC: opt(1), debug]] 

La plupart des attributs sont affiliés à un environnement spécifique et relèvent de sa documentation particulière.

2. Exemples d’utilisation

a. Expérimentation GNU

La documentation http://cppreference.com se réfère à l’environnement GNU et donne l’exemple suivant :

[[gnu::always_inline]] [[gnu::hot]] [[gnu::const]] [[nodiscard]] 
inline int f(); // declare f avec quatre attributs 
 
[[gnu::always_inline, gnu::const, gnu::hot, nodiscard]] 
int f(); // idem mais en réunissant les quatre attributs 
 
// C++17 permet le using 
[[using gnu : const, always_inline, hot]] [[nodiscard]] 
 ...