C

en.wikipedia.org/wiki/c_(programming_language)

Foundational systems language for OS kernels, embedded firmware, and performance code.

Overview

C is a general-purpose, imperative programming language created in the 1970s by Dennis Ritchie at Bell Labs. Originally developed as a successor to the B programming language, C was designed to provide relatively direct access to CPU architecture features while maintaining cross-platform portability. It has been standardized since 1989 by ANSI and subsequently by ISO/IEC.\n\nThe language is characterized by its minimal runtime overhead, low-level memory access via pointers, and efficient compilation to machine instructions. C supports structured programming with functions, control flow constructs (if, for, while, switch), and user-defined types. Despite its age, C remains one of the most widely used programming languages, ranking consistently in the top two on the TIOBE index since 2000.\n\nC is extensively used for implementing operating system kernels, device drivers, protocol stacks, and embedded systems. It runs on platforms ranging from supercomputers to microcontrollers, with compilers available for virtually all modern computer architectures and operating systems.

Key features

  • Imperative procedural paradigm
  • Static weak typing
  • Low-level memory access via pointers
  • Structured programming support
  • Minimal runtime overhead
  • Efficient machine code compilation
  • Cross-platform portability
  • Standard library with I/O and math functions
  • Preprocessor for macros and conditional compilation
  • Function pointers for runtime polymorphism
Pros
  • Minimal runtime overhead and efficient execution
  • Direct hardware access via pointers
  • Highly portable across platforms and architectures
  • Extensive compiler support (GCC, Clang, MSVC, etc.)
  • Small language core with flexible standard library
  • Decades of proven reliability in critical systems
  • Rich ecosystem of libraries and tools
Cons
  • Manual memory management prone to errors
  • Weak type system allows implicit conversions
  • No built-in object-oriented features
  • No garbage collection in standard language
  • Requires careful pointer handling
  • Limited string handling compared to modern languages
  • Steep learning curve for memory management concepts
Use this if
You need maximum performance and control over hardware, are building systems software or embedded systems, require cross-platform compatibility, or need to work with legacy codebases.
Skip this if
You prioritize rapid development, need built-in memory safety, require high-level abstractions, or are building web applications or data science projects where higher-level languages are more suitable.

Best for

Systems programmingOperating system developmentEmbedded systemsDevice driversProtocol stacksPerformance-critical applicationsCross-platform development

Alternatives

C++RustGoPythonJava

Compare C alternatives

More Language

Compare all
View Zig
Zig

Low-level language aiming to be a modern, simpler alternative to C for systems code.

View Go
Go

Google's compiled language for simple, fast systems programming and cloud-native services.

View JavaScript
JavaScript

The web's core programming language for interactive pages, apps, and full-stack development.

View HTML5
HTML5

Standard markup language for structuring web pages, media, and semantic content.