Функции и структура на програмата - 2
Chapter 4 - Functions and Program Structure
4.6 Static Variables
4.7 Register Variables
4.8 Block Structure
4.9 Initialization
4.10 Recursion
4.11 The C Preprocessor
4.11.1 File Inclusion
4.11.2 Macro Substitution
4.11.3 Conditional Inclusion
Статични променливи
Автоматични (външни) променливи - видими само във файла, където за
дефинирани.
Локални (вътрешни) променливи - запазват стойността си при повторно
викане на функцията.
static char buf[BUFSIZE]; /* buffer for ungetch
*/
static int bufp = 0; /* next free position in buf */
int getch(void)
{ ... }
void ungetch(int c)
{ ... }
Пример:
Register променливи
Брзи променливи
register int x;
register char c;
int f(register unsigned m, register long n)
{
register int i;
...
}
Блокова структура
Дефиниране на променливи, локални за блок.
if (n > 0) {
int i; /* declare a new i */
for (i = 0; i < n; i++) ...
}
Пример:
Инициализация
Задаване на начална стойност на променливи.
int x = 1;
char squota = '\'';
long day = 1000L * 60L * 60L * 24L; /* milliseconds/day
*/
int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,
30, 31 }
Рекурсия
/* qsort: sort v[left]...v[right] into
increasing order */
void qsort(int v[], int left, int right)
{
int i, last;
void swap(int v[], int i, int j);
if (left
>= right) /*
do nothing if array contains */
return; /*
fewer than two elements */
swap(v, left, (left + right)/2); /*
move partition elem */
last = left; /* to v[0] */
for (i = left + 1; i <= right; i++)
/* partition */
if (v[i] <
v[left])
swap(v,
++last, i);
swap(v, left, last);
/* restore partition elem */
qsort(v, left, last-1);
qsort(v, last+1, right);
}
/* swap: interchange v[i] and v[j] */
void swap(int v[], int i, int j)
{
int temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
Препроцесорът на С
Включване на файлове
#include "filename"
or
#include <filename>
Замяна на макроси
#define square(x) x * x /*
WRONG */
square(z+1)
Пример:
Условно включване
#if !defined(HDR)
#define HDR
/* contents of hdr.h go here */
#endif
Пример: