Глиф Учебники

Чем C отличается от C++

Справочник · C · 2 минуты чтения

Коротко: C++ вырос из C, поэтому почти всё из C есть и в C++ — те же типы, условия, циклы, функции, указатели, printf и scanf. Сверх этого в C++ есть классы, шаблоны и большая стандартная библиотека: строки std::string, массивы std::vector, готовые сортировки и словари. В C строки, массивы переменной длины и память — вручную.

История такая: в 1979 году Бьёрн Страуструп начал добавлять к C классы, а в 1983 году язык получил имя C++. За десятилетия C++ стал гораздо больше, и сейчас это два разных языка со своими стандартами.

Главные отличия

CC++
Строкимассив char, функции string.hкласс std::string
Массив переменной длиныmalloc, realloc, freestd::vector
Сортировка, множества, словариqsort, остальное — самомуsort, set, map из STL
Ввод и выводprintf, scanfcout, cin (и printf тоже)
Классы, перегрузка функций, шаблонынетесть
Ссылки (int&)нет, только указателиесть
Расширение файла.c.cpp
Компилятор GCCgccg++

C — маленький язык: его можно выучить целиком, а всё, что программа делает с памятью, видно в коде. C++ огромен, зато многое берёт на себя: std::string сам следит за длиной строки, std::vector — за памятью. STL в таблице — стандартная библиотека шаблонов C++: готовые контейнеры (хранилища данных) и алгоритмы.

Где код на C не собирается как C++

Большая часть программ на C собирается и компилятором C++, но не все:

И наоборот, cout, string, vector, классы в C не работают совсем.

Маленькое любопытное отличие — тип символа в кавычках:

C
#include <stdio.h>

int main(void) {
    printf("%zu\n", sizeof('a'));
    return 0;
}
Вывод
4

В C символ 'a' имеет тип int (4 байта на обычном компьютере), а в C++ — тип char, и та же программа на C++ вывела бы 1.

Что учить первым

Переход в любую сторону несложен: основы — переменные, условия, циклы, функции — одинаковы. Курс по C++ — в теме C++.

gcc или g++

gcc выбирает язык по расширению файла: .c собирается как C, .cpp — как C++ (но для C++ удобнее g++: он сам подключает стандартную библиотеку C++). Программа на C, сохранённая в файле .cpp, собирается как C++ — и может не собраться из-за отличий выше. Поэтому файлы на C называйте .c. Visual Studio тоже различает язык по расширению.