01 variables
TRANSCRIPT
Variables
Variables are places for holding data in memory.
C data types are: void. char. int. float. double.
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.
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.
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).
Type modifiers
signed. unsigned. short. long.
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).
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.
Storage specifiers
auto. register. static. extern.
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.
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.
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.
Type qualifiers
const. volatile. restrict.
const keyword
The variable value cannot have it's value changed during the excution of the program.
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.
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.
Restrict keyword
Will be explained later when talking about pointers.
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.
Specific integral type limits
C99 new types
_Bool. _Complex. _Imaginary.
_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).
_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.