Главная страница
Навигация по странице:

  • Imports инструкция Module определения глобальных данныхSub Main

  • Лекции. Основные понятия и определения


    Скачать 1.94 Mb.
    НазваниеОсновные понятия и определения
    Дата27.03.2018
    Размер1.94 Mb.
    Формат файлаdocx
    Имя файлаЛекции.docx
    ТипКонтрольные вопросы
    #39570
    страница41 из 58
    1   ...   37   38   39   40   41   42   43   44   ...   58

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


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

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

    14.3.1. Язык С


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

    Все выражения для 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}}

    };

    14.3.2. Язык Basic


    Правила инициализации объектов программы аналогичны языку C за исключением массива указателей, поскольку в этом языке тип указатель отсутствует.

    14.4. Рекомендуемая структура программы


    Программы на языках C и Basic в общем случае состоят из нескольких модулей, структура каждого из них строится по общим правилам.

    14.4.1. Структура модуля на языке Basic


    инструкции Imports

    инструкция Module

    определения глобальных данных

    Sub Main()

    локальные определения и описания

    выполняемые инструкции

    End Sub

    тексты процедур и функций

    End Module

    14.4.2. Структура модуля на языке C


    директивы препроцессора (#define, #include)

    описания и определения внешних объектов

    int main( ){

    локальные определения и описания

    выполняемые инструкции

    }

    тексты функций

    Рекомендуемая структура не вполне корректна по следующим причинам:

    - директивы препроцессора могут встречаться в любом месте файла, единственное ограничение в том, что они должны предшествовать определяемым константам;

    - перед текстом функции main() могут быть определения других функций.
    1   ...   37   38   39   40   41   42   43   44   ...   58


    написать администратору сайта