C#
C is an imperative, procedural computer programming language with static type system.
C is specified by the following standards:
| year | name | standard |
|---|---|---|
| 1989 | ANSI C (C89) | ANSI X3.159-1989 |
| 1999 | C99 | ISO/IEC 9899:1999 |
| 2011 | C11 | ISO/IEC 9899:2011 |
Example: Hello World
int main() {
if (a < 3){
printf("Hello World");
}
}
TODO list all keywords
Operations#
- bitwise logic:
~,&,|,^ - bitwise shifts:
<<,>> - boolean logic:
!,&&,|| - equality testing:
==,!= - comparison:
<,<=,>,>=
TODO diagram explaining the GNU tool chain: linker
Best practices#
Namespaces: use a capital prefix before each function name to
indicate their belonging to a certain source file. Example: in led.c
use LED_switchOn(); instead of switchOn() Reason: C does not support
native namespaces and including header files could lead to name clashes.
Typedefs: declare enums and structs
Constants: for constants prefer const over preprocessor #define
Top-level static: If a function or global variable isn't exported in the header, declare it as static in the source file to give it internal linkage.
Const-Correctness: use const everywhere you can
Booleans: Use bool from stdbool.h whenever you have a boolean
value
Pure Expressions: avoid function calls in expressions, such as if
Unsigned: Avoid unsigned types because the integer conversion rules are complicated
Sizeof: use sizeof on the variable; not the type
Assert: Use assert everywhere your program would fail otherwise
Naming: Never begin names with _ or end them with _t: they're
reserved by future C standards