1995 wurde erneut ein Ausschuss gegründet, um C zu erweitern und zu verbessern. Daraus ging 1999 ein neuer ISO Standard hervor.
Mit C99 fließen auch aus C++ bekannte Erweiterungen in die C-Norm ein.
Zu den wichtigsten Neuerungen gehören:
- Zulassen des aus C++ bekannten Zeilenkommentars "//"
- Datentypen long long int und unsigned long long int, die mindestens 64 Bit groß sein müssen; boolescher Datentyp _Bool; Datentyp _Complex zur Behandlung komplexer Zahlen
- Ganzzahlige Datentypen mit vorgegebener Mindestbreite (1, 2, 4 oder 8 Byte)
- Alias-freie Zeiger (Schlüsselwort restrict)
- Lokale Felder variabler Größe
- Frei platzierbare Deklaration von Bezeichnern (in C90 durften diese nur am Anfang eines Blocks stehen)
- Inline-Funktionen
- Verbot des "impliziten int"; Verbot impliziter Funktionsdeklarationen
- Alternative Schreibweisen für Operatoren, wie beispielsweise and anstelle von &&
- hexadezimale Fließkommakonstanten. Ein- und Ausgabe in scanf() und printf() über "A"
- Präprozessor-Makros mit variabler Parameteranzahl
- Erweiterte Bibliothek (z. B. complex.h: csin(), math.h: sinf() sinf() erf() tgamma())