201 votes

Que signifie le préfixe de variable `m_` ?

Je vois souvent m_ préfixe utilisé pour les variables ( m_World , m_Sprites ...) dans les tutoriels, exemples et autres codes principalement liés au développement de jeux.

Pourquoi les gens ajoutent-ils le préfixe m_ aux variables ?

3 votes

26 votes

Avant de suivre aveuglément l'exemple de la notation hongroise, veuillez vérifier ce qu'est réellement la notation hongroise. Parce que nommer un int iCounter est tout simplement inutile. Mais nommer un int xAnnotationPos et yAnnotationPos est raisonnable. Utilisez la version sémantique.

0 votes

Parfois, les modules importés préfixent les fonctions et les variables afin que vous soyez moins susceptible de les écraser avec votre propre code. C'est une façon de "réserver" des noms pour un usage spécifique.

9voto

jnbbender Points 391

Lockheed Martin utilise un schéma de nommage à trois préfixes avec lequel il est très facile de travailler, surtout lorsqu'on lit le code des autres.

   Scope          Reference Type(*Case-by-Case)   Type

   member   m     pointer p                       integer n
   argument a     reference r                     short   n
   local    l                                     float   f
                                                  double  f
                                                  boolean b

Alors...

int A::methodCall(float af_Argument1, int* apn_Arg2)
{
    lpn_Temp = apn_Arg2;
    mpf_Oops = lpn_Temp;  // Here I can see I made a mistake, I should not assign an int* to a float*
}

Prenez-le pour ce qu'il vaut.

4voto

sergut Points 239

Comme indiqué dans de nombreuses autres réponses, m_ est un préfixe qui désigne les variables membres. Il est/était couramment utilisé dans le monde du C++ et s'est propagé à d'autres langages également, y compris Java.

Dans un IDE moderne, c'est complètement redondant, car la coloration syntaxique indique clairement quelles sont les variables à utiliser. local et lesquels sont membres . Cependant, lorsque la coloration syntaxique est apparue à la fin des années 90, la convention existait depuis de nombreuses années et était fermement établie (du moins dans le monde du C++).

Je ne sais pas à quels didacticiels vous faites référence, mais je suppose qu'ils utilisent la convention en raison de l'un des deux facteurs suivants :

  • Il s'agit de tutoriels C++, écrits par des personnes habituées à la convention m_, et/ou...
  • Ils écrivent le code en texte brut (monospace), sans coloration syntaxique, et la convention m_ est donc utile pour rendre les exemples plus clairs.

3voto

D'autres ont mentionné que cela signifie un membre de la classe. Qt est un Framework C++ populaire qui utilise cette notation et beaucoup de tutoriels C++ GUI utilisent cette notation. m_ . Vous pouvez voir presque tous leurs exemples utiliser m_ pour les membres de la classe. Personnellement, j'utilise m_ car il est plus court que this-> et est compact.

2voto

OlivierM Points 946

Pour compléter les réponses actuelles et comme la question n'est pas spécifique à une langue, certains projets C utilisent le préfixe m_ pour définir des variables globales spécifiques à un fichier - et g_ pour les variables globales qui ont une portée plus grande que le fichier dans lequel elles sont définies.
Dans ce cas, les variables globales définies avec le préfixe m_ doit être défini comme suit static .

Voir Convention de codage EDK2 (une implémentation Open-Source de l'UEFI) pour un exemple de projet utilisant cette convention.

1voto

yyny Points 1412

Un argument que je n'ai pas encore vu est qu'un préfixe tel que m_ peut être utilisé pour éviter les conflits de noms avec #define des macros.

Recherche Regex pour #define [a-z][A-Za-z0-9_]*[^(] en /usr/include/term.h des malédictions/ncurses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X