Nombre de C idiom – `static void * thing = & thing;`

El código:

static const void *const uniquePtr = &uniquePtr; 

… proporcionará un puntero de void único en la unidad de comstackción. Es útil para generar un identificador o nombre único para las API a las que les gusta tomar un nombre como void* de esta manera.

Ejemplos de uso:

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

Sería sensato envolver este patrón en una macro para evitar cometer un error y encapsular la idea para que se autoconteste.

Pero eso nos lleva a la pregunta: ¿existe un nombre para este idioma que se pueda usar para nombrar la macro ?:

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

¿Alguna idea?

Como se mencionó anteriormente, es muy probable que no haya un lenguaje estándar, por lo que puede elegir lo que crea mejor. Quizás algo como UNIQUE_VOID_POINTER o algo así.

Yo lo llamaría una self reference mismo, no es muy diferente de:

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

Esto tiene la ventaja adicional de que no tiene que eliminar la referencia a un puntero void* para poder usarlo. (por ejemplo: assert (me.moi == &me); )

Un lenguaje de progtwigción es un medio de express una construcción recurrente en uno o más lenguajes de progtwigción.

¿Es eso una construcción, que se repite con la frecuencia suficiente para justificar que es su “propia cosa”? ¿Califica para ser un idioma por definición?

A pesar de que la pregunta está etiquetada como C , parece que esto es puramente una cosa de Objective-C en unas pocas API, y ni el lenguaje ni las API particulares parecen ser ejemplares. Sirve para el simple propósito de proporcionar un valor arbitrario único, una forma de enumeración perezosa cuando realmente no te importa el valor clave. ¿Debería ser un idioma?

Creo que no, y no es mi preferencia personal sino la lógica simple. Es raro e insignificante, básicamente es un valor en la memoria que resulta ser igual a su dirección en la memoria. Merece tanto tener su propio nombre como lo hace un entero en una matriz con un valor igual a su índice en la matriz.

Además, al no tener ningún nombre estandarizado, esta pregunta se convierte automáticamente en una “basada principalmente en la opinión”, que está en contra de las directrices de SO, además de no estar relacionada con un problema de progtwigción en primer lugar. No es un “problema de progtwigción específico”, no es un “problema práctico y que se pueda responder que sea exclusivo del desarrollo de software”, ya que no tener su propio nombre no es en absoluto problemático para su uso, es un tema de discusión en una discusión Tablero para progtwigdores. Tiene un lugar aquí en SO tanto como una pregunta ” ¿Cómo debo nombrar mi variable? ” Y no me refiero a las convenciones de encoding, en última instancia, de eso se trata la pregunta, cómo nombrar una macro … y más o menos cualquier cosa, al menos vagamente relacionada con su intención de uso, DECLARE_VOID_THING a DECLARE_VOID_THING , como por ejemplo UNIQUE_HANDLE , y no es necesario que sea un idioma para resolver ese “problema” y, por último, no hay ningún idioma que nombrar aquí.