Структура програмског система

Било би непрактично понављати прототипове функција и декларације глобалних променљивих датог програмског модула у свакој датотеци програмског система у којима се они користе. Уместо тога, уз сваки програмски модул прави се и једна специјална датотека, која представља заглавље модула и садржи све информације које могу бити потребне преводиоцу за језик C при провери исправности коришћење елемената модула. Уобичајено је да проширење имена (екстензија) тих датотека буде .h. Садржај такве датотеке укључује се у превођење садржаја неке датотеке директивом преводиоца #include чији је општи облик:

#include "назив_датотеке" /* за кориснички дефинисана заглавља */ 
#include <назив_датотеке> /* за системска заглавља – стандардна заглавља библиотечких функција */

Заглавља модула могу да садрже:

  • директиве #define за дефинисање симболичких константи и макрое

  • наредбе enum за дефинисање набројаних константи

  • наредбе typedef за придруживање идентификатора типовима података

  • декларације глобалних података (extern)

  • прототипове (декларације) функција

  • директиве #include за укључивање других заглавља

Дефиниције глобалних променљивих и функција које су декларисане у заглављу смештају се у једну или више датотека изворног текста програма са проширењем имена .c. Свака од њих треба да садржи директиву #include са именом заглавља свог модула. Свака од тих датотека чини једну јединицу превођења, која се преводи независно од осталих јединица. Коришћење заједничког заглавља је једина спона међу њима и једини гарант да ће декларације од глобалног значаја бити истоветне у току превођења сваке од тих јединица.

Када се пишу програмски системи састављени од већег броја програмских модула (датотека и заглавља) неопходно је креирати тзв. пројекат, јер ће на тај начин програм преводилац знати да све те датотеке и заглавља треба заједно да обрађује. Наравно, датотека и заглавље из једног пројекта могу се укључити у друге пројекте!

Пример: написати програмски модул који одређује највећи заједнички делилац и најмањи заједнички садржалац. Написати програм који приказује могућности датог модула.

Решење:

/* nzdnzs.h - zaglavlje modula, ovde se samo deklarisu funkcije koje cemo koristiti, dakle ovde se navode samo prototipovi funkcija */
unsigned nzd (unsigned a, unsigned b);
unsigned nzs (unsigned a, unsigned b);
/* nzdnzs.c - u ovom fajlu nalaze se definicije funkcija nzd i nzs */
unsigned nzd (unsigned a, unsigned b)
{
	unsigned c;
	while (b!=0){c=b;	b=a%b;a=c;	}
	return a;
}

unsigned nzs (unsigned a, unsigned b)
{
	return a*b/nzd(a,b);
}

Фајл који садржи главни програм:

#include <stdio.h>
#include <stdlib.h>
#include"nzdnzs.h"
int main()
{
	unsigned x,y;
	printf("x,y? ");scanf("%u%u",&x,&y);
	printf("nzd=%u\n",nzd(x,y));
	printf("nzs=%u\n",nzs(x,y));
    	return 0;
}

One thought on “Структура програмског система

  1. Повратни пинг: Модуларно програмирање – Рачунари и програмирање

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се /  Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се /  Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се /  Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се /  Промени )

Повезивање са %s