A nyelv alapját az ANSI C specifikáció képezte, de tovább bővítették azt C++ és Java-beli elemekkel.
Ez a leírás nem tér ki azokra a nyelvi elemekre, melyekben a Cg teljesen megegyezik az ANSI C-vel.
Támogatja a preprocesszori utasításokat, mint az #if, #define, stb. Implementációtól függően támogatja a makróként használt #define utasítást, és a #include-ot.
A nyelv specifikációjában fenntartott szóként szerepel minden C és C++-beli fenntartott szó, de ezek nem mindegyike használt.
Csendes különbségek azok az eltérések a C nyelvtől, amik C szemléletű Cg programozás esetén nem okoznak fordítási hibát, de helytelen működést eredményezhetnek, ezért ezekre kiemelten kell figyelni a programozás során.
Ezek a különbségek:
A több lehetséges hardver és API miatt egy programot többféleképpen lehet vagy éppen nem is lehet lefordítani.
Ennek a nyelvi szintű támogatására szolgálnak a profilok. A használható profilok köre az új fordítókkal bővülhetnek, mivel egy új hardver új lehetőségeket kínálhat.
A profilok megszabják, hogy milyen típusok, műveletek, ciklusok, és Standard Library-beli függvények használhatók.
A profiloknak két fajtája van, a Vertex Profile és Pixel Profile, rendre vertex shader és pixel shader programokhoz.
A Cg fordítók által jelenleg ismert profilok:
Az egyes profilok pontos lehetőségei megtalálhatók a nyelv specifikációjában.