C Complex und Bool: Warum hat der C-Standard die Typen mit "_Bool" benannt?

Stannis

Lt. Junior Grade
Dabei seit
Juli 2011
Beiträge
462
#1
Anstatt sich die kurzen, prägnanten Namen zu nehmen? Das wundert mich schon länger. Ich weiß, dass in den Jahren vor C99 schon jede Menge Leute privat den Typen bool und complex definiert und genutzt haben.

Aber als nun C99 rauskam, wieso hat man ihnen die einfachen Namen überlassen? Mir wird oft Kompatibilität als Grund genannt, aber:
  • Wer damals ANSI-C-Projekte mit eigenem boole'schen Datentypen hatte, hat diese Projekte sowieso nicht über nacht auf C99 portiert.
  • Wer neue Projekte angefangen hat, hat gleich C99 genutzt anstatt Complex und Bool selbst neu zu definieren
  • Wenn es dennoch Kompatibilitätsprobleme gab, so würde Ich dreist erwarten, dass sich nicht der gesamte C-Standard nach den anderen Projekten richten muss, sondern umgekehrt. Mit Suchen+Ersetzen hätten sie ihren bool in kürzester Zeit in _Bool umbenennen können.


Ich vermute mal, dass Ich irgendetwas Signifikantes nicht bedacht habe?
 
Dabei seit
März 2008
Beiträge
2.315
#2
Identifier, die mit _ anfangen, sind reserviert. Die neuen Datentypen so zu benenennen, bedeutet dass bisher konforme Programme dadurch nicht kaputt gehen.
Wer bisher einen eigenen Datentypen namens _Bool hatte, hat gegen den Standard verstoßen und ist selber schuld.

€dit316 Aus dem C-Standard:
All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use.

All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.

Each macro name in any of the following subclauses (including the future library directions) is reserved for use as specified if any of its associated headers is included, unless explicitly stated otherwise.

All identifiers with external linkage (including future library directions) and errno are always reserved for use as identifiers with external linkage.

Each identifier with file scope listed in any of the following subclauses (including the future library directions) is reserved for use as a macro name and as an identifier with file scope in the same name space if any of its associated headers is included.

Wer damals ANSI-C-Projekte mit eigenem boole'schen Datentypen hatte, hat diese Projekte sowieso nicht über nacht auf C99 portiert.
Wenn er sich damals an den Standard gehalten hat, kann er einfach zu einem Compiler mit aktuellerem Support wechseln, ohne dass etwas kaputt geht.

Wer neue Projekte angefangen hat, hat gleich C99 genutzt anstatt Complex und Bool selbst neu zu definieren
Der hat ja dann auch die neuen Typenbezeichner.

Wenn es dennoch Kompatibilitätsprobleme gab, so würde Ich dreist erwarten, dass sich nicht der gesamte C-Standard nach den anderen Projekten richten muss, sondern umgekehrt. Mit Suchen+Ersetzen hätten sie ihren bool in kürzester Zeit in _Bool umbenennen können.
"Tja Ätsch, wir haben all eure Projekte kaputt gemacht. Pech, gelitten!" ist kein gutes Argument, einen neuen Standard zu etablieren.
Die Verantwortlichen für den Standard können Projekte, die nach einem älteren Standard geschrieben wurden, nicht rückwirkend ändern. Außerdem gibt es noch die Möglichkeit, dass der Source Code gar nicht mehr zur Verfügung steht.
 
Zuletzt bearbeitet:

Stannis

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Juli 2011
Beiträge
462
#3
Identifier, die mit _ anfangen, sind reserviert. Die neuen Datentypen so zu benenennen, bedeutet dass bisher konforme Programme dadurch nicht kaputt gehen.
Die gehen nicht kaputt. Dazu müssten sie erst mall stdbool.h inkludieren was bedeuten würde, dass sie ja sowieso die neuen Standartypen nutzen wollen.

Und Compiler kann man einstellen, so dass sie für ansi oder 99 oder 11 kompilieren.

Der hat ja dann auch die neuen Typenbezeichner.
Umständliche Typbezeichner. Mein Punkt ist, dass man Programmierer dazu verdammt hat, bis in alle Ewigkeit _Complex zu tippen, statt einfach complex. Stell dir vor, Du müsstest immer _Int schreiben, nur weil irgendwer sich mal int reserviert hat.

Es stimmt, die Standardisierer können rückwirkend nichts ändern. Aber wer seinen Code von ansi auf 99 portieren will, kann sich fünf Minuten Zeit nehmen um die neuen C99-Datentypen zu verwenden. Dazu muss er einen Header inkludieren und seine eigenen typedefs löschen.
 
Top