Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Использование директивы препроцессора #include

Поиск

В языке C откомпилировать исходные файлы и собрать из полученных объектных модулей единый загрузочный модуль можно, не используя этих специальных средств. Для этого в текст одного из исходных модулей включаются с помощью директивы #include тексты всех остальных модулей и полученный единый исходный модуль транслируется и компонуется.

Пример.

/* file3.c */

#include "ext.h"

#include "file1.c"

#include "file2.c"

Т

Е

К

С

Т

 

Замечание. Такой прием используется только для небольших программ в 2-3 исходных модуля, т.к. любая модификация требует перетрансляции всей программы. В этом случае исходные тексты удобно располагать в одной директории (папке). В общем случае, такой прием не рекомендуется.

Средства управления проектом

Эти средства включены в описание сред разработки Borland C++ 3.1 и Visual Basic 6.0 и приведены в Приложениях 1 и 2.

Инициализация данных

Под инициализацией понимают задание значений объектам программы в момент их определения. В языке Basic все числовые объекты и строки постоянной длины инициализируются нулями, строки произвольной длины – "пустой" строкой (""). Средств инициализации другими значениями не предусмотрено, поэтому речь далее пойдет только о языке C.

Любое определение может задать начальное значение определяемого объекта с помощью инициаторов.

Инициатор: =<выражение>|{<список_выражений>}

Все выражения для static и extern объектов – постоянные, для auto и registerпроизвольные. Если объект типа static или extern не инициируется, то для числовых типов он получает значение нуль, для символьных массивов "" (пустая строка), для указателей – значение символической константы NULL. Другие объекты получают в отведенной области памяти "мусор" (неопределенные значения).

Если объект представляет собой совокупность (структура, массив, объединение), то инициатор имеет вид: {<выражение>[<, выражение>]...}. Выражения – это инициаторы для элементов, записанные в порядке их хранения в памяти. Если совокупность содержит составные подобъекты, то правило рекурсивно распространяется и на них.

Если инициаторов меньше, чем элементов, то оставшиеся инициируются по общим правилам, если больше, то регистрируется ошибка. Для инициализации символьных массивов можно использовать литералы типа string.

Все объекты инициализируются только в момент выделения памяти, по-этому объекты класса памяти static или extern при изменении начальное значение не восстанавливают, а объекты класса памяти auto или register инициализируются каждый раз при входе в функцию или блок, где они определены.

Примеры.

1. Скаляры.

#define SIZE 3

static int dlina=SIZE+1;

int k=n+1;

 

2. Массивы.

int x[ ]={1,2,3}; // Размерность определяет транслятор по числу инициаторов

float y[4][3]={ // Эквивалентная запись float y[4][3]={1,3,5,2,4,6,3,5,7};

{1,3,5 }, // 0-я строка

{2,4,6 }, // 1-я строка

{3,5,7 } // 2-я строка

}; // 3-я строка:0 (для static | extern) | "мусор" (для auto | register)

float y[4][3]={ // Заполняет только 1-й столбец

{1},

{2},

{3},

{4}

};

3. Символьный массив.

char msg[ ]="Синтаксическая ошибка в строке %s\n";

Длина массива определяется числом инициаторов. Конечный 0 включается.

4. Массив указателей.

/* Выдать название месяца по номеру */

char* month_name(int n){

static char* name[ ]={

"Hеправильный месяц",

"Январь",

"Февраль",

"Март",

"Апрель",

"Май",

"Июнь",

"Июль",

"Август",

"Сентябрь",

"Октябрь",

"Hоябрь",

"Декабрь"

};

return n<1||n>12? name[0]:name[n];

} /* End month_name */

5. Массив структур.

static struct {

char * mess; int window[4];

}message[ ]={

{"Имя входного файла", {14,12,35,14}},

{"Имя dbf-файла", {16,12,31,14}},

{"Имя файла программы", {12,12,37,14}}

};




Поделиться:


Последнее изменение этой страницы: 2017-02-08; просмотров: 358; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.43.200 (0.006 с.)