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 <stdio.h> 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 <stdio.h> #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: 17. March 2020
Připomínky k obsahu stránky posílejte na e-mail: peringer AT fit.vutbr.cz