Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SVT.doc
Скачиваний:
23
Добавлен:
25.09.2019
Размер:
1.65 Mб
Скачать

Условная компиляция

Препроцессор языка Си предоставляет возможность компиляции с условиями. Это допускает возможность существования различных версий одного кода. Обычно, такой подход используется для настройки программы под платформу компилятора, состояние (отлаживаемый код может быть выделен в результирующем коде), или возможность проверки подключения файла строго один раз.

В общем случае, программисту необходимо использовать конструкцию наподобие этой:

#ifndef FOO_H

#define FOO_H

...(код заголовочного файла)...

#endif

Такая «защита макросов» предотвращает двойное подключение заголовочного файла путем проверки существования этого макроса, который имеет то же самое имя, что и заголовочный файл. Определение макроса FOO_H происходит, когда заголовочный файл впервые обрабатывается препроцессором. Затем, если этот заголовочный файл вновь подключается, FOO_H уже определен, в результате чего препроцессор пропускает полностью текст этого заголовочного файла.

#pragma once - для цели исключения двойного подключения файлов также существует эта нестандартная директива. Стандартом не оговорено как конкретно препроцессор должен обрабатывать эту директиву.

Курьёз с ANSI-директивой «#pragma». Согласно спецификации языка компиляторам предоставлена полная свобода при обработке этой конструкции. До версии 1.17 компилятор GCC при нахождении в исходном коде этой директивы пытался запустить Emacs с игрой «Ханойские башни»

Типы переменных

int - Знаковое целое

float – числа с плавающей точкой.

Тип int означает, что значения перечисленных переменных есть целые,

в отличие от него тип float указывает на значения с плавающей точкой,

т. е. на числа, которые могут иметь дробную часть.

Тип int имеет размер наиболее подходящий для обработки в среде исполнения, но не менее 16 бит.

Числа типа float обычно представляются 32-разрядными словами, имеющими по крайней мере 6 десятичных значащих цифр (лежат приблизительно в диапазоне от10^-8до 10^38).

Помимо int и float в Си имеется еще несколько базовых типов для

данных, это:

char - символ - единичный байт;

short - короткое целое;

long - длинное целое;

double - с плавающей точкой с двойной точностью.

Для того, чтобы не задумываться над фактической длинной типов рекомендуется пользоваться библиотекой inttype.h, определяющей целочисленные типы фиксированной длины: intN_t, uintN_t

Статические массивы объявляются следующим образом:

int i_array[10];

Ссылки и указатели:

int *p; - указатель на инт

int x;

p = &x;

*p=3;

x = 3;

Помимо использования типов с заданной длинной имеет смысл использовать выравненные типы: в названии типа принимает участие размер значения, который может принимать переменная, однако при компиляции тип выравнивается до величины машинного слова, что ускоряет выполнение программы.

Математические операторы

Агебраические

I++  I = I + 1;

I--  I = I – 1;

I @= B  I = I @ B; @ - любая операция – (+ - * / % << >> & ~)

Логические (применяются в логических выражениях, например в if)

!! – или

&& - и

== - равенство

!= - неравенство

Битовые

! – или

& - и

^ - исключающее или

<< - сдвиг влево

>> - сдвиг вправо

~ - инверсия

0x01 & 0x01 = 0x01

0x00 & 0x01 = 0x00

0x01 ! 0x01 = 0x01

0x00 ! 0x01 = 0x01

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]