Was bedeutet das 9. Gebot?

8

In Die zehn Gebote für C-Programmierer , was ist Ihre Interpretation des 9. Gebot ?

Das neunte Gebot:

  

Deine äußerlichen Kennzeichen sollen in den ersten sechs Zeichen einzigartig sein, obwohl diese harte Disziplin lästig ist und die Jahre ihrer Notwendigkeit vor dir scheinbar ohne Ende strecken, damit du dein Haar nicht herausreißt und an diesem schicksalhaften Tag wahnsinnig wirst um Ihr Programm auf einem alten System laufen zu lassen.

Was genau ist das?

    
GEOCHET 25.03.2009, 18:11
quelle

7 Antworten

27

Alte Linker verwendeten nur eine begrenzte Anzahl von Zeichen des Symbols - ich erinnere mich, dass die alten IBM Mainframes, mit denen ich anfing zu programmieren, nur 8 Zeichen verwendeten. Die C-Standards-Leute entschieden sich für 6 Zeichen als "kleinsten gemeinsamen Nenner", aber würden einem Linker erlauben, längere Namen aufzulösen, wenn sie es wollten.

Wenn Sie wirklich einen dieser Linker mit dem kleinsten gemeinsamen Nenner treffen, werden externe Symbole (Funktionsnamen, externe Variablen usw.) ABCDEFG und ABCDEFH für sie gleich aussehen. Wenn Sie nicht auf wirklich alter Hardware programmieren, können Sie dieses "Gebot" ignorieren.

Beachten Sie, dass jeder Linker, der nicht mehr als 6 Zeichen verarbeiten kann, wegen des Mangelnamens nicht in C ++ arbeiten kann.

    
Paul Tomblin 25.03.2009, 17:54
quelle
9

Externe Kennung = etwas, das möglicherweise von einem anderen System aufgerufen werden muss

Der Grund dafür, dass die ersten sechs Zeichen einzigartig sind, besteht darin, dass ein altes System eine sechsstellige Begrenzung für seine Kennungen haben kann. Wenn eines Tages ein solches System versucht, Ihren Code aufzurufen, muss er in der Lage sein, alle Ihre Funktionen zu unterscheiden.

Heutzutage scheint mir das zu konservativ, außer Sie arbeiten mit vielen Legacy-Systemen.

    
JosephStyons 25.03.2009 17:54
quelle
7

Hier ist die Mindestanzahl signifikanter Zeichen in einem externen Bezeichner, die von C / C ++ - Compilern unter verschiedenen Standards unterstützt werden müssen:

  • C90 - 6 Zeichen
  • C99 - 31 Zeichen
  • C ++ 98 - 1024 Zeichen

Hier ist ein Beispiel für die Arten von Problemen, mit denen Sie konfrontiert werden können, wenn Ihr Toolset diese Grenzen überschreitet (von Ссылка ) :

  

Hinweis für Benutzer mit Borland und   MetroWerks CodeWarrior als Backend C:

     

================================================ ====================

     

Beachten Sie, dass der Borland-Compiler und -Linker und der Metrowerks-Compiler   scheinen eine maximale externe ID-Länge von 250 Zeichen zu haben. Es wendet sich   aus, dass einige der generierten Namen der entstellten Vorlagen nicht in der Lage sind   in diesen Raum passen. Deshalb, wenn Borland oder Metrowerks verwendet wird   Als Backend-C-Compiler haben wir einige der Namen libcomo neu zugeordnet   verwendet zu kürzeren Namen. So kurz, dass wir nicht durchkommen konnten   Namen, die mit Unterstrichen beginnen. In der Tat war es notwendig, die meisten zu kartografieren   zu 2 Zeichen ID-Namen.

    
Michael Burr 25.03.2009 19:01
quelle
6

Als Antwort auf:

  • C ++ 98 - 1024 Zeichen

"Beginne Humor"

Nachtrag zum 9. Gebot:

  

Wenn Ihre externen Identifikatoren sich irgendwo annähern   fast so lange wie eintausend und   vierundzwanzig solltest du sicher sein   schnell nach draußen gebracht und erschossen.

'/ Ende Humor'

    
Trevor Boyd Smith 26.03.2009 03:27
quelle
5

Viele alte Compiler und Linker hatten Beschränkungen, wie lange ein Bezeichner sein könnte. Sechs Zeichen waren eine gemeinsame Grenze. Eigentlich könnten sie länger sein, aber der Compiler oder Linker würde alles nach dem sechsten Zeichen wegwerfen.

Dies wurde normalerweise getan, um den Speicher der Symboltabelle zu erhalten.

    
Ferruccio 25.03.2009 17:55
quelle
3

Laut dieser Website :

Was bedeutet das? Ihre Globals sollten "einzigartig für die ersten sechs Buchstaben", nicht "beschränkt auf sechs Buchstaben" sein. Dies ist in ANSI, ich höre, wegen der äußerst schmerzhaften "Überalterung" einiger Linker. Hoffentlich wird ANSI eines Tages sagen: "Linker müssen längere Namen machen, oder sie werden weinen und längere Namen machen". (Und alle rationalen Menschen werden dieses Gebot einfach ignorieren und den Leuten sagen, dass sie ihren 2-Penny-Linker aufrüsten sollen - das kann dir keine Freunde bringen oder Warnungen fröhlich machen ...)

    
Eric Petroelje 25.03.2009 17:54
quelle
3

Es bedeutet, dass Sie ein Stück alter Geschichte betrachten. Diese Gebote sind größtenteils richtig, aber diese neunte kann auch in eine Steintafel geschnitzt werden, sie ist so alt.

Das verbleibende Geheimnis ist: creat . Was war falsch mit create ? Es sind nur sechs Buchstaben!

    
Daniel Earwicker 25.03.2009 18:06
quelle

Tags und Links