2. C Course
By
Fady Mohammed Osman
Mail:Fady_moa@yahoo.com
3. Variables
Variables are places for holding data in
memory.
C data types are:
void.
char.
int.
float.
double.
4. Naming rules
Must start with a character or an underscore
only.
Form second letter and on, it can be a
character, a digit, or an underscore.
Shall not take the name of language reserved
keywords (if, for, while, etc...)
It is case sensitive.
5. Scope of variables
Local variables:
declared inside function and can only be
accessed inside that function.
Formal parameters :
special case of local variables declared inside
function prototype.
Global variables:
declared outside any function and can be
accessed from any where in the program.
6. Life time
Can be defined as the duration of the program
during which the variable is accessible.
This may be all the time of the program
excution (global and static).
Or only limited to the time of excution of a
function(local and formal parameters).
8. Type sizes and range
Common size in a 80x86 machine:
char 8 bit (1 byte).
short 16 bit (2 byte).
int 32 bit (4 byte which is the word size).
long int (4 byte).
long long int (8 byte).
float 32 bit (4 byte).
double 64 bit (8 byte).
long double 64 bit (8 bytes).
9. The general rule
This rule is always true.
short<=int<=long<=long long.
int is at least 16 bit.
long is at least 32 bit.
long long is at least 64 bit.
11. register keyword
It tells the compiler to store a variable in such a
way that it can be accessed as quickly as
possible (i.e. In a register).
The comiler can sometimes ignore this since
there's only samll number of registers available.
A good practice is to use this keyword with
variables that control or accessed in loops.
Today most optimized compilers do this
automatically.
12. static
Local static variables:
When applied to a local variables it allows it to
maintain its value between function calls (its
value isn't lost when the function returns).
Global static variables:
It tells the compiler to create a global variable
that is only seen within the file where it was
declared so we can link it with any file without
fear of side effects i.e another global variable
with the same name.
13. extern keyword
Used when you have a multiple files and one of
them contains a gloabal variables.in order to
make this global variable seen by other files we
use the extern keyword.
15. const keyword
The variable value cannot have it's value
changed during the excution of the program.
16. volatile keyword
It tells the compiler that the value of the variable
may change at any time--without any action
being taken by the code the compiler finds
nearby.
Problems that volatile can solve in embedded
world:
- Code that works fine--until you enable
compiler optimizations .
- Code that works fine--until interrupts are
enabled.
- RTOS tasks that work fine in isolation--until
some other task is spawned.
17. Proper use of volatile
Proper use of volatile:
1. Memory-mapped peripheral registers.
2. Global variables modified by an interrupt
service routine .
3. Global variables accessed by multiple tasks
within a multi-threaded application.
19. stdint.h file
This header is particularly useful for embedded
programming which often involves considerable
manipulation of hardware specific I/O registers
requiring integer data of fixed widths, specific
locations and exact alignments.
22. _Bool
A variable of size 1 byte.
Can contain a true (1) or false (0).
Where true and false are preprocessor macros
defined in the header file stdbool.h.
Be ware when using the ++ and - - operator.
When assigning any other value than 0 it'll
return 1(true).
23. _Complex and _Imaginary
Rarly used types.
used in scientific programs.
Also a library of c functions using the header
file <complex.h> .
Declaration:
float _Complex or double _Complex.
float _Complex is 8 bytes.
double _Complex is 16 bytes.