Préférez les namespaces anonymes aux static C

Préférez les namespaces anonymes aux static C - C++ - Programmation

Marsh Posté le 29-07-2003 à 00:53:59    

je veux pas entendre de 'les variables globales ça pue'.
 
pré-requis: connaissance sur les namespace (pour comprendre)
 
souvent, dans une même unité de compilation (un fichier quoi) on définit et utilise plusieurs fonctions/variables/classes localement utilisées. c'est à dire que ces éléments ne sont et ne doivent être utilisés qu'à l'intérieur de votre fichier.  
 
vous êtes un programmeur C ou vous avez été mal enseigné: vous utilisez le spécificateur de portée 'static' pour rendre vos variables/fonctions 'privées' à votre fichier
 

Code :
  1. static int i;
  2. static void f();


 
2 constats rapides: vous avez souvent des problèmes avec vos objets statiques mal initialisés, vous n'arrivez pas à définir des classes privées au fichier.
 
le C++ apporte une réponse élégante et passe partout!
 

Code :
  1. namespace
  2. {
  3.   int i;
  4.   class Foo;
  5.   void f();
  6. }


 
cela a pour effet de placer vos déclarations dans un référenciel lexical privé, donc inaccessible depuis d'autres unités de traduction, votre compilateur s'occupant de nommer sans équivoques les différents namespaces anonymes de vos fichiers.  
 
 

Code :
  1. namespace
  2. {
  3.   int i;
  4.   class Foo;
  5. void f();
  6. }
  7. namespace
  8. {
  9.   void g();
  10. }


 
ici, f() et g() sont déclarées dans le même namespace, puisque la déclaration des namespaces est incrémentale.
 
depuis le reste du code de votre fichier, appelez simplement ces éléments sans préfixes.
 

Code :
  1. f();
  2. g();
  3. i=3;


Message édité par Taz le 06-09-2003 à 12:43:19
Reply

Marsh Posté le 29-07-2003 à 00:53:59   

Reply

Marsh Posté le 06-09-2003 à 01:31:17    

ca peut en effet eviter les erreurs :) merci :jap:


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 06-09-2003 à 04:40:51    

euh, j ai pas tout capte :??:
 
=> si tu veux pouvoir reutilise f ou g, il faut recreer un namespace non ??
gerne
 

Code :
  1. hello
  2. {
  3.   void f(int x) { ..........}
  4. }
  5. hello
  6. {
  7.    f(25);
  8. }


 
=>c est comme ca ??

Reply

Marsh Posté le 06-09-2003 à 08:21:58    

non.
 
edit : je fais des articles pas des cours. j'aborde des points qui ne sont pas évoqués dans les livres ou souvent mal expliqués ainsi que des astuces. si je commence, je m'en sortirais plus. les namespace sont à la base, au même niveau que les classes. achète toi un bouquin ;)
 
edit #2 : d'ailleurs

Taz a écrit :


pré-requis: connaissance sur les namespace (pour comprendre)


Message édité par Taz le 06-09-2003 à 12:44:13
Reply

Marsh Posté le 18-02-2004 à 01:02:38    

je rajoute que les namespaces anonymes ont un autre avantage : ça permet de déclarer des variables privées à l'unité de traduction avec un linkage extern.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed