2015-03-11 8 views
6

Der Code:Name c Idiom - `static void * Sache = &thing;`

static const void *const uniquePtr = &uniquePtr; 

... ein einzigartigen void Zeiger in der Übersetzungseinheit bereitzustellen. Es ist praktisch zum Generieren eines eindeutigen Handles oder Namens für APIs, die auf diese Weise einen Namen als void* nehmen möchten.

Beispiele:

Es wäre sinnvoll, dieses Muster in einem Makro wickeln einen Fehler damit zu verhindern, dass, und die Idee zu kapseln damit es sich selbst dokumentiert.

Aber das führt zu der Frage: gibt es einen Namen für dieses Idiom, die verwendet werden können, um das Makro zu nennen ?:

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

Irgendwelche Gedanken?

+2

Wie wäre es: Seltsam wiederkehrender Void Pointer –

+3

@ddriver diese Frage ist eine schlechte Passform für Programmierer - es wäre schnell abgestimmt und geschlossen dort drüben, siehe http://meta.programmers.stackexchange.com/questions/6582/ On-the-Mühen-der-Benennung-und-Terminologie Empfohlene Lektüre: ** [Was geht Programmers.SE? Ein Leitfaden für Stack Overflow] (http://meta.programmers.stackexchange.com/q/7182/31260) ** – gnat

+0

@gnat - nach dem "So was ist hier im Bereich?" Punkt ist es eine perfekte Passform. Zumindest viel besser als SO. – dtech

Antwort

1

Wie oben ausgeführt, gibt es (sehr wahrscheinlich) keinen Standard-Sprachgebrauch, so dass Sie frei wählen können, was immer Sie für am besten halten. Vielleicht etwas wie UNIQUE_VOID_POINTER oder etwas ähnliches.

+0

Vielen Dank für den Vorschlag. Ich bin mit 'DEFINE_HANDLE' gegangen, weil das ziemlich nah dran ist, und es ist ziemlich präzise. Es war nützlich (wenn auch überraschend) zu wissen, dass es keinen festen Namen zu geben scheint. – Benjohn

1

ich es nennen würde ein self reference es ist nicht sehr anders:

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

Dies hat den zusätzlichen Vorteil, dass Sie zu dereferenzieren einen void* Zeiger haben, um es nicht zu benutzen. (zB: assert (me.moi == &me);)

0

Ein Programmier-Idiom ist ein Mittel, um ein wiederkehrendes Konstrukt in einer oder mehreren Programmiersprachen auszudrücken.

Ist das ein Konstrukt, häufig genug, um zu rechtfertigen, sein "eigenes Ding" zu sein? Ist es per definitionem qualifiziert, ein Idiom zu sein?

Obwohl die Frage als C markiert ist, scheint es, dass dies eine reine Objective-C-Sache in einigen APIs ist, und weder die Sprache noch die speziellen APIs sind vorbildlich. Es dient dem einfachen Zweck, einen eindeutigen willkürlichen Wert zu liefern, eine Form der faulen Aufzählung, wenn Sie sich nicht wirklich um den Schlüsselwert kümmern. Sollte das ein Idiom sein?

Ich denke nicht, und es ist nicht meine persönliche Vorliebe, sondern einfache Logik. Es ist selten und unbedeutend, im Grunde ist es ein Wert im Speicher, der zufällig mit seiner Adresse im Speicher übereinstimmt. Es verdient so viel wie ein Integer in einem Array mit einem Wert, der seinem Index im Array entspricht.

Darüber hinaus wird diese Frage, ohne einen standardisierten Namen dafür zu haben, automatisch zu einer "primär meinungsbasierten", die gegen die SO-Richtlinien verstößt, zusätzlich zu keinem Programmierproblem. Es ist kein "spezifisches Programmierproblem", es ist kein "praktisches, beantwortbares Problem, das für die Softwareentwicklung einzigartig ist", da ein eigener Name in keiner Weise problematisch ist, sondern ein Diskussionsthema in einer Diskussion ist Board für Programmierer.Es hat einen Platz hier auf SO so viel wie eine Frage "Wie soll ich meine Variable nennen?" und ich meine nicht Kodierung Konventionen, letztlich ist das, worum die Frage geht, wie man ein Makro nennt ... und so ziemlich alles, was mindestens vage verwandt ist mit seiner Nutzungsabsicht, wird DECLARE_VOID_THING schlagen, wie man sagen kann, und es gibt keine Notwendigkeit dafür zu sein oder es zu einem Idiom zu machen, um dieses "Problem" zu lösen, und schließlich - es gibt kein Idiom zu nennen Hier.

+0

LOL. :-) Danke für das Lachen und die Antwort. Sie glauben also nicht, dass eine eindeutige Identität wichtig ist (Absatz 2 und 3) oder in anderen Sprachen zu sehen ist (ich vermute, dass es in Lisp "Gensym" ist), und Sie finden eine API, die die Verwendung eines eindeutigen Identitätsverdächtigen erfordert und das ist alles nur gute Logik, nicht dein besonderer Geschmack (p3)? p4 - @nhgrif hat das gut gemacht - ich bin ehrlich sehr überrascht, dass es dafür keinen festen Namen gibt, also, wo fange ich an zu fragen? – Benjohn

+0

Um fair zu sein, es ist nicht viel wie "Gensym". Aber trotzdem - garantierte einzigartige Identitäten, die nichts "tun", außer dem Handeln als ein Griff für andere Dinge, sind in vielen Einstellungen äußerst nützlich. Wie gesagt, ich bin sehr überrascht, dass es keinen akzeptierten (sprachunspezifischen) Namen für das Konzept gibt. – Benjohn

+0

heilige Kommentar Bombardierung ... "Sie fühlen sich nicht garantiert, einzigartige Identität ist wichtig" - in dieser besonderen Form ist es nur ich und der Rest der Welt mit wenigen, wie es scheint. Ich habe nicht argumentiert, dass es völlig nutzlos ist, nur darauf hingewiesen, dass es andere Mechanismen gibt, um das zu erreichen, einschließlich einiger, die keinen Laufzeit-Overhead haben. Aber bitte, sag mir noch ein paar Mal, wie nützlich ** du es findest **. Weil ich fühle, dass du das nicht annähernd genug betont hast. Sie sollten die Situation vollständig ausnutzen und nach Ihnen benennen, damit Ihr Name für immer weiterlebt;) – dtech