Low-level programming langauge originally part of Unix.
C is the lingua franca of the software world as so much is written in it. Any serious programmer should have significant familiarity with C.
C is worth learning as an aid to thinking about problems at the hardware and operating system levels - though it is still an abstract machine on top of the real hardware.
Style
ANSI C89 compliant code is preferred for portability. Here are a few standard conventions:
General
- use
/* */
comment pairs, never//
- no tabs, expand to spaces. 2 spaces per indentation level
- no whitespace after the keywords
if
,for
, andwhile
. - no braces around single-line blocks (e.g.,
if
,for
, andwhile
bodies) - integer valued functions return -1 on error, 0 or positive on success
enum
and#define
ed constants should beUPPERCASE
struct
tags areUnderscore_Capitalized
, with matching typedefs- function and variable names are compact like
krninit
when possible,underscore_lowercased
when clarity demands - automatic variables (local variables inside a function) are never initialized at declaration
- don't write
!strcmp
(or!memcmp
, etc.); always explicitly compare the result fo string or memory comparison with zero - include files should not include other files (prevents circular dependencies and keeps compilation fast)
Comments
- Code should be readable and require few comments. Functions should have a line or two comment above explaining their purpose (even if redundant, as the purpose may not always be clear to others).
- Every field of a struct should have a corresponding comment
- Low-level code should be verbosely commented and when possible include links to reference materials. This can prevent a lot of wasteful churn between code, reference materials, and search engines when reading.
Libraries
The C language does not provide a library system for larger-scale code reuse. However, one powerful - the single header file library - has emerged as an excellent way to integrate with and manage dependencies. Single header file libraries are our preferred method for sharing and reusing code across projects.
- Sean Barrett's stb libraries
- Mattias Gustavsson's single-header libraries
- A curated collection of single-header libraries
- cute headers
incoming(1): web
Last update on 7E4C11, edited 3 times. 3/3thh