Jazyk C: Příklad 4
Chybné řešení:
(správně mají být sdílené deklarace v hlavičkovém
souboru, aby se zabránilo případné nekonzistenci - viz dále)
/*
* x1.c -- ukázka programu sestaveného ze dvou modulů
*
* modul x1 se musí sestavit s modulem x2 (x2.c)
*
*/
extern int x2; /* deklarace externí proměnné x2 */
/* tato proměnná je v modulu x2 */
/* spoléháme se na to, že je int */
/* zkuste extern char -- uvidíte chybu */
void x1(void) /* funkce dostupná z jiných modulů */
{
--x2;
}
/*
* x2.c -- ukázka programu sestaveného ze dvou modulů
*
* modul x2 se musí sestavit s modulem x1 (x1.c) například takto:
*
* cc x2.c x1.c
*
* UPOZORNĚNÍ: překladač nekontroluje konzistenci deklarací x1 a x2
*/
#include
int x2 = 0; /* proměnná dostupná z jiných modulů */
void x1(void); /* deklarace externí funkce x1 */
/* tato funkce je v modulu x1 */
int main() /* funkce main musí být jen jedna */
{
printf("%d\n", x2);
x1(); /* volání externí funkce x1 */
printf("%d\n", x2);
return 0;
}
Správné řešení:
/* x.h -- společné rozhraní modulů x1.c a x2.c */
extern int x2; /* deklarace externí proměnné x2 */
/* zkuste změnit na char
- překladač odhalí chybu
při překladu modulu x2.c */
void x1(void); /* deklarace funkce x1 dostupné z jiných modulů */
/* konec x.h */
/*
* x1.c -- ukázka programu sestaveného ze dvou modulů
*
* modul x1 se musí sestavit s modulem x2 (x2.c)
*
*/
#include "x.h" /* dovezeme společné deklarace */
void x1(void) /* definice externí funkce */
{
--x2;
}
/*
* x2.c -- ukázka programu sestaveného ze dvou modulů
*
* modul x2 se musí sestavit s modulem x1 (x1.c) například takto:
*
* cc x2.c x1.c
*
*/
#include
#include "x.h" /* dovezeme společné deklarace */
int x2 = 0; /* definice externí proměnné */
int main() /* funkce main musí být jen jedna */
{
printf("%d\n", x2);
x1(); /* volání externí funkce x1 */
printf("%d\n", x2);
return 0;
}
Kromě správně vytvořených a použitých "*.h" souborů je nutné ještě řešení
závislostí - například momocí programu "make".
Poslední modifikace:
Připomínky k obsahu stránky posílejte na e-mail:
peringer AT fit.vutbr.cz