Programmeerimiskeel C loodi firma AT&T uurimisasutuses ja tema autoriks on Dennis Ritchie. Samas asutuses loodi ka uus operatsioonisüsteem UNIX, mis erinevalt teistest selleaegsetest operatsioonisüsteemidest ei olnud programmeeritud masinkoodis, vaid hoopis programmeerimiskeeles C. See võimaldas nimetatud operatsioonisüsteemi kiiresti porteerida väga mitmesugustele arvutitele. See kõik tingis ka programmeerimiskeele C kiire leviku. Varem loodi suurem osa operatsioonisüsteemidest vastavalt iga arvuti eriomadustele. Seetõttu olid ka konkreetse arvuti jaoks loodud programmid kasutatavad vaid sellel arvutil või paremal juhul antud firma arvutitel. Arvutiehitusest sõltumatu operatsioonisüsteem (UNIX) lõi nagu omamoodi vahelüli arvuti ja programmide vahel ja võimaldas luua programme, mis töötasid kõikidel arvutitel, milles see operatsioonisüsteem oli installeeritud. Kuna aga programmid sageli kasutasid masinate eriomadusi (töökiiruse tõstmiseks), siis oli vaja arvutiehitusest sõltumatut programmeerimiskeelt. Selle tühiku täitiski programmeerimiskeel C.
C on vägagi paindlik programmeerimiskeel. Osa programmistidest arvavad, et C on tegelikult vaid natuke mugavam assembler. Programmeerimiskeeles C on võimalik kodeerida mitmeid probleeme, mis ei ole teistes programmeerimiskeeltes ilma assembleri abita lahendatavad. Selle näiteks võiks tuua eraldi bittide mõjutamise ja katkestuste (interrupts) kasutamise. Nii saab kodeerida masinalähedasi probleeme ja siiski kindlustada programmi hea porteeritavuse (implementeerimise teistsuguse ehitusega arvutil ainult uuesti transleerimise abil).
See paindlikkus tekitab aga ka mitmeid probleeme. Programmeerimiskeel C lubab kodeerida väga keerukaid probleeme lühikesel kujul, kuid seejuures tuleb täpselt teada, mida tehakse. Just see paindlikkus takistab translaatoril mitmete võimalike vigade äratundmist. Seega peab programmeerija ise teadma, kas koostatud programm sellisel kujul ka midagi mõistlikku teeb.
C keel on ka üsna lühike oma sõnastuses. See võimaldab kirjutada keeruka programmi kiiresti ja vähese vaevaga. Teiset küljest on lühikeste funktsiooninimede meelespidamine raskem, ja unustada ei tohi ka seda, et see, mis kiiresti paberile visatud (arvutisse toksitud), on sageli ka üsna vigane.
Nagu juba öeldud, võimaldab programmeerimiskeel C mitmeid probleeme üsna arvutilähedaselt kodeerida. Sedamoodi loodud masinkood on ka sageli kiirem kui teistes keeltes kodeeritud programm. Teisest küljest on programmi töökiiruse tõstmiseks sageli olulisem valida sobivam algoritm (lahendusviis), kui otsida parem translaator.
Nii nagu teistegi keelte puhul, ilmus ka peale programmeerimiskeele C loomist hulganiselt C erivariante. Iga firma soovis realiseerida mingeid erisoove ja lisavõimaluste implementeerimise kaudu oma translaatorit paremini turustada. See aga ei ole kasutajale enamasti sugugi vajalik. Hulga tähtsam on, et loodud programmi õnnestuks transleerida ka teiste C keele translaatorite abil. Kui see ei ole võimalik, siis ei saa seda programmi ka teistsuguse ehitusega arvutitele porteerida. Seepärast loodi C keele standard ANSI (American National Standardisation Institute) X3J11. Peale seda on ilmunud mitmeid teisigi standardeid, mis lisavad loodule uusi võimalusi. Nimetatud standard määrab kindlaks C keele programmi põhiehituse, operaatorid, võtmesõnad ja palju muud. Sellest standardist kinni pidades saab garanteerida, et enamik translaatoreist saavad selle programmiga hakkama.
Selles raamatus käsitletakse ka mõningaid Borland C/C++ translaatori eriomadusi, ilma milleta ei saaks osa teemasid käsitleda või mis on muul viisil programmistile vajalikud.