C is an imperative compiled programming language. It’s an important starting language in computer engineering since:
- The language interacts so closely with hardware.
- It introduces concepts in the context of memory.
- It requires us to implement many functions by hand.
It lacks things like objects and classes, but it does introduce finer control of memory and hardware components. Not to be confused with C++ — which is not a superset of C but closely related.
C versions are expressed by the year of release. The most common versions are C89, C99, and C11. The two dominant C compilers are GCC and Clang.
Language features
- Data types
- Qualifiers
- Memory access
- Preprocessor
Libraries
Tools
Development environment
An opinionated set-up:
- Compiler — Clang
Resources
- Jorengarenar’s blog, for applications and some tips
- For an introduction to the language:
- Beej’s Guide to C Programming, by Brian Hall (2023)
- Modern C, by Jens Gustedt (2021)
Courses
- APS105 — Computer Fundamentals, for introductory C
- ECE243 — Computer Organization, for embedded C
- ECE344 — Operating Systems, for systems C