Welche C-Features werden von C ++ - Features beeinflusst / abgeleitet? [geschlossen]

8

Was sind Funktionen aus dem aktuellen C-Standard, die ursprünglich nicht Teil von C waren, aber in / für C ++ erfunden wurden und aufgrund ihrer Vorteile später in C übernommen wurden?

Ein prominentes Beispiel ist der einzeilige Kommentar //, der ursprünglich aus C ++ stammte und später von C übernommen wurde.

Kennen Sie weitere Funktionen des aktuellen C-Standards, die explizit oder implizit aus der Entwicklung von C ++ stammen?

Info: Natürlich weiß ich, dass C ++ von C abgeleitet ist, aber ich habe nur darüber nachgedacht, welche Funktionen aus der Entwicklung seines Derivats C ++ übernommen wurden.

RobertS unterstützt Monica Cellio
quelle
4
Cs _BoolTyp wurde von C ++ inspiriert, boolglaube ich.
Jesper Juhl
2
Die Möglichkeit, Variablen an anderen Stellen als ganz oben in einer Funktion zu deklarieren, war auch zuerst ein C ++, das später von CI think übernommen wurde.
Jesper Juhl
2
Ich denke, Funktionsprototypen kamen von C ++, IIRC.
Ian Abbott
2
"Implicit int" nicht als Funktionsrückgabetyp zuzulassen (außer main()), ist (glaube ich) auch etwas, das C ++ als Pionierarbeit geleistet und C anschließend übernommen hat.
Jesper Juhl
5
Dies scheint keine Frage mit einer klaren Antwort zu sein, und hier gibt es kein offensichtliches Problem.
Caleb

Antworten:

4

Ich kann nicht bestätigen, dass sie definitiv direkt von C ++ beeinflusst wurden 1 , aber hier ist eine Liste der Funktionen in Standard-C ++, die in C99 hinzugefügt wurden:

  • einzeilige Kommentare (wie erwähnt)
  • Inline-Funktionen
  • Variablen nach Blockbeginn erlaubt
  • Boolescher Datentyp
  • komplexe mathematische Bibliothek

C11:

  • Anonyme Gewerkschaften (C11 erlaubt auch anonyme Strukturen). Anonyme Gewerkschaften waren bereits in Standard-C ++. (Anonyme Strukturen sind in Standard-C ++ immer noch nicht zulässig.)

1 Zum Beispiel hatte BCPL, der Vorgänger von B, der wiederum der Vorgänger von C ist, bereits dieselbe Syntax für einzeilige Kommentare. Einige davon wurden möglicherweise in einigen C-Implementierungen als Spracherweiterungen unterstützt, bevor sie in Standard-C ++ integriert wurden. In diesen Fällen wurden möglicherweise sowohl Standard C als auch Standard C ++ von derselben Quelle beeinflusst, anstatt sich gegenseitig zu beeinflussen.

Eerorika
quelle
1
@KonradRudolph Anonym: union named { struct { int i;}; };Unbenannt : union named { struct { int i;} unnamed; };. Die unbenannte Struktur hat keinen Namen, aber eine benannte Variable. Anonyme Struktur ist unbenannt und hat keine benannte Variable.
Eerorika
1
@Konrad stackoverflow.com/a/14248127/560648
Leichtigkeitsrennen im Orbit
1
Inline-Funktionen gab es in GCC und anderen Compilern vor C ++.
Lee Daniel Crocker
2

Attribute wurden in C ++ 11 hinzugefügt und werden in der nächsten C-Standardversion C2x hinzugefügt . Der Vorschlag (und hier ) für diese Funktion bezieht sich speziell auf C ++.

Attribute können nützlich sein, um Informationen bereitzustellen, die dem Compiler beispielsweise helfen, eine bessere Diagnose zu erstellen oder den generierten Code zu optimieren. Quelle

Beispiel:

int [[attr1]] i [[attr2, attr3]];

[[attr4(arg1, arg2)]] if (cond)

{
    [[vendor::attr5]] return i;
}

In diesem Beispiel „ Attribut attr1 auf die Art der Variable i, attr2 gilt und attr3 auf die Variable selbst gilt, gilt attr4 auf dem if - Anweisung und Hersteller :: attr5 zur Rückstellung gilt.Quelle

Adam
quelle
Interessant, aber "wird hinzugefügt" ist nicht garantiert.
chux