In Die zehn Gebote für C-Programmierer , was ist Ihre Interpretation des 9. 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?
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.
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.
Hier ist die Mindestanzahl signifikanter Zeichen in einem externen Bezeichner, die von C / C ++ - Compilern unter verschiedenen Standards unterstützt werden müssen:
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.
Als Antwort auf:
"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'
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.
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 ...)
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!
Tags und Links c