Nom de l’idiome c – `static void * thing = & thing;`

Le code:

static const void *const uniquePtr = &uniquePtr; 

… Fournira un pointeur void unique dans l’unité de compilation. C’est pratique pour générer un handle ou un nom unique pour les API qui aiment prendre un nom comme void* de cette façon.

Exemples d’utilisation:

  • objc_setAssociatedObject et objc_getAssociatedObject
  • addObserver:forKeyPath:options:context:

Il serait judicieux d’envelopper ce modèle dans une macro pour éviter de s’y tromper et pour encapsuler l’idée afin qu’elle se documente elle-même.

Mais cela nous amène à la question: existe-t-il un nom pour cet idiome qui peut être utilisé pour nommer la macro ?:

 #define DECLARE_VOID_THING(name) static const void *const name = &name DECLARE_VOID_THING(aHandle); DECLARE_VOID_THING(anotherHandle); 

Des pensées?

Comme cela a été fait ci-dessus, il n’ya pas (très probablement) de jargon standard, vous êtes donc libre de choisir ce que vous préférez. Peut-être quelque chose comme UNIQUE_VOID_POINTER ou quelque chose comme UNIQUE_VOID_POINTER .

Je l’appellerais une self reference ce n’est pas très différent de:

 struct self { struct self *moi; } me = { &me}; 

Cela présente l’avantage supplémentaire de ne pas devoir déréférencer un pointeur void* pour pouvoir l’utiliser. (par exemple: assert (me.moi == &me); )

Un idiome de programmation est un moyen d’exprimer une construction récurrente dans un ou plusieurs langages de programmation.

Est-ce une construction qui revient assez souvent pour justifier d’être sa “propre chose”? Est-il admissible à être un idiome par définition?

Même si la question est étiquetée C , il semble que ceci soit purement une chose Objective-C dans quelques API, et ni le langage ni les API en particulier ne paraissent exemplaires. Il sert simplement à fournir une valeur arbitraire unique, une forme d’énumération paresseuse lorsque vous ne vous souciez pas de la valeur clé. Cela devrait-il être un idiome?

Je ne le pense pas et ce n’est pas ma préférence personnelle, mais une simple logique. C’est rare et insignifiant, il s’agit fondamentalement d’une valeur en mémoire qui se trouve être égale à son adresse en mémoire. Il mérite autant d’avoir son propre nom qu’un nombre entier dans un tableau avec une valeur égale à son index dans le tableau.

De plus, n’ayant pas de nom normalisé, cette question se transforme automatiquement en une question “essentiellement d’opinion”, ce qui va à l’encontre des directives SO, en plus de ne pas être lié à un problème de programmation. Ce n’est pas un “problème de programmation spécifique”, ce n’est pas un “problème pratique, qui doit être résolu et qui est unique au développement logiciel”, car ne pas avoir son propre nom n’est en aucun cas problématique à son utilisation, c’est un sujet de discussion dans une discussion tableau pour les programmeurs. Il a sa place ici sur SO autant que la question ” Comment nommer ma variable? ” Et je ne parle pas de conventions de codage, en définitive, c’est de quoi parle la question, comment nommer une macro … et à peu près tout ce qui est au moins vaguement lié à son intention d’utilisation l’ UNIQUE_HANDLE DECLARE_VOID_THING , comme par exemple un UNIQUE_HANDLE , et il n’est pas nécessaire que ce soit un idiome pour en résoudre le problème, et enfin – il n’y a pas d’idiome à nommer.