C vs C++
C++ is NOT a superset of C
C++ began as a fork of an early, pre-standardized C. However, the latest C++ is no longer a superset of the latest C.
Incompatibilities can be found in the wiki page: https://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Release Cycles
- C++: every 3 years (C++98, C++03, C++11, C++14, C++17, C++20, C++23, C++26).
 - C: updated much slower than C++ (C99, C11, C17, C23).
 
Procedural vs Object-oriented
- C++: object-oriented.
 - C: procedural.
 
C headers vs C++ headers
- C Header: with 
.hsuffix, e.g.<time.h>. - C++ Header: with 
cprefix, e.g.<ctime>. 
Differences:
- C does not have 
namespace. C headers will go into the global namespace, C++ style headers will go intostdnamespace. - C headers don't have overloaded functions, e.g. C++ header 
<cmath>has overloadedsqrtfunctions forintand forfloat, but<math.h>only has one. 
Some C headers do not have C++ version, e.g. <stdatomic.h>.
  Takeaway: C++ program should avoid any C-Style headers <xxxx.h> if possible.
  (e.g. use cstdio instead of stdio.h):
#include <cstdio>
int main() {
  std::printf("Hello World\n");
}
Overloading / Overriding
- C++: supports both.
 - C: does not support either.
 
Memory Management
- C++: 
new/deleteand smart pointers. - C: 
calloc()/malloc()andfree(). 
Read more: C / C++ Memory Management
Security
- C++: supports encapsulation.
 - C: data can be accessible by other entities.
 
Type cast / conversion
- C-style cast: conversion 
(int)3.5; cast(int)"hello". - C++-style cast: 
static_cast, etc. 
Strings
- C-style string: 
char*. - C++-style string: 
std::stringandstd::string_view(since C++17). 
Build tools
Both can use Clang and GCC.
They have different standard libraries:
- C: 
libc. Implementations:glibc(GNU C Library),musl(a lightweight implementation for Linux) - C++: 
libc++in Clang,libstdc++in GCC. 
Pointers and References
- C++: has both pointers and references.
 - C: has pointers, but no references.
 
Functions in Structure
- C: doesn't allow 
functioninstruct. - C++: allows 
functioninstruct. 
Use Cases
C++ is more popular with applications level programming. C is more popular in low level systems programming.
- C is used in
    
- operating systems, e.g. Linux Kernel (C++ is not allowed in Linux Kernel).
 - embedded systems.
 - compilers, libraries, interpreters of other languages: CPython (https://github.com/python/cpython)
 - graphics: Vulkan, OpenGL.
 - databases: PostgreSQL, Redis.
 
 - C++
    
- compilers, libraries, interpreters of other languages: OpenJDK, V8.
 - game engines: Unity, Unreal Engine.
 - databases: MongoDB, sqlite3.
 - server-side programming (used by many companies, like Google, Facebook, etc).
 
 - many projects use both, e.g. Chrome, MySQL, etc.
 
Linus Torvalds’ views on C++
C++ is a horrible language. It’s made more horrible by the fact that a lot of substandard programmers use it, to the point where it’s much much easier to generate total and utter crap with it. Quite frankly, even if the choice of C were to do nothing but keep the C++ programmers out, that in itself would be a huge reason to use C.