C e C++
sono due linguaggi di programmazione ad alto livello. Tuttavia, poiché essi mantengono evidenti relazioni semantiche con il linguaggio macchina e l'assembly, risultano molto meno astratti di linguaggi anche affini (appartenenti allo stesso paradigma di programmazione), come per esempio il Pascal. Per questo motivo, talvolta vengono anche identificati con la locuzione linguaggio di medio livello, se non addirittura (in modo certamente improprio) come macro-assembly, o assembly portabile.
C fu ideato nei Bell Laboratories della AT&T nel 1972 da Dennis Ritchie come evoluzione del linguaggio B di Ken Thompson usato per la scrittura dei primi sistemi operativi UNIX ed è rinomato per la sua efficienza. Si è imposto come linguaggio di riferimento per la realizzazione di software di sistema su gran parte delle piattaforme hardware moderne. La standardizzazione del linguaggio (da parte dell'ANSI prima e dell'ISO poi) garantisce la portabilità dei programmi scritti in C (standard, spesso detto ANSI C) su qualsiasi piattaforma.
Il C è stato a lungo il linguaggio dominante in tutta una serie di altri domini applicativi caratterizzati da forte enfasi sull'efficienza. Esempi tipici sono le telecomunicazioni, il controllo di processi industriali e il software real-time. Oggi il suo predominio in questi contesti è in parte diminuito a seguito dell'avvento di competitor significativi, primo fra tutti il C++.
Il C++ è un linguaggio di programmazione orientato agli oggetti sviluppato da Bjarne Stroustrup e basato sul linguaggio C. Nonostante la maggior parte del codice sorgente C sia valido anche per il C++, essi non sono sottoinsiemi nel senso più stretto della parola. C++ fu standardizzato nel 1998 (ISO/IEC 14882-1998 "Information Technology - Programming Languages - C++"). In aggiunta al supporto alla programmazione orientata agli oggetti, il C++ è distinto dal C per il suo supporto alla programmazione generica e alla metaprogrammazione attraverso l'uso dei templates.
E' molto diffuso e apprezzato, ma raramente è usato al massimo delle sue potenzialità: la sua semantica è molto ricca di dettagli e sfumature che condizionano il comportamento del codice, e che molto spesso i compilatori implementano in maniera scorretta o incompleta: molte delle caratteristiche dello standard ISO del linguaggio non sono ancora implementate nei compilatori attuali, anche se la situazione sta migliorando lentamente. La grande ricchezza semantica del C++, insieme alle librerie che lo accompagnano, lo rende un linguaggio estremamente espressivo e potente, ma che richiede molto tempo per venire appreso e padroneggiato completamente.
Il C++ ha una libreria standard, in modo simile al C. Oltre a questa, particolare importanza ricopre l'uso di una STL, Standard Template Library. Si tratta di una libreria che definisce una serie di template generici per strutture dati comuni, come vettori, code, array associativi, e così via. La programmazione ne risulta molto semplificata, al prezzo di un gran lavoro del compilatore per interpretare i complessi template.

