Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Bartík Ondřej 27. 11. 2010, 13:52:49
-
Dobrý den,
mám problém když skládám projekt z více souboru (main.c funkce.c a funkce.h).
Propojení je nejspíš správné, ale nedaří se mi vytvořit globalní proměnou v hlavičkovém souboru funkce.h. Programuji jednočip ATmega2560 kde se používaji datové typy uint8_t uint16_t atp.
propojení je následující:
//main.c
#include "funkce.h"
#include <avr/io.h> // originalni hlavicka primo pro procesor zahrnujici praci s vstupy/vystupy
int main (void){
return 0;
}
//
//funkce.c
#include <avr/io.h>
int test (void)
{
return 0;
}
//
//funkce.h
#ifndef _FUNKCE_H
#define _FUNKCE_H
int test (void);
#endif
//
Uměl by mi někdo poradit ? Děkuji za odpověď.
-
No tak za 1. ten funkce.c by měl includovat funkce.h.
Globální proměnné se definují v souboru .c a deklarují v .h jako EXTERN. Hlavičkový soubor NESMÍ vytvářet objekty, jinak by tam mohly být 2x...
-
aha děkuju a co se týče toho, že ve funkci.c není includovana funkce.h tak to jsem vyčetl z jednoho příkladu, že takhle je to správně a prej proto aby to tam také nebylo 2x
-
To je více či méně formalita. Jde třeba o to, když funkce.h includuje nějaké jiné .h, tak je zbytečné, aby totéž includovalo i .c . Jinak vše, co může být v .h ve skutečnosti nic nevytváří, hlavička funkce jen říká, že tam něco takového bude a že s tím má překladač počítat.
-
nicméně stále to nefunguje...
do hlavickoveho souboru sem jendoduse vlozil extern uint8_t a; jeste pred deklaraci funkci
a pote znovu do main.c uint8_t a; kde se sni dale pracoval ale proste v tom hlavickovem souboru hlasi expected '=', ',', ';', 'asm' or '__attribute__' before 'a'
-
Vypadá to, že překladač nezná uint8_t – to není zas až tak standardní typ. Zkus dát #include <avr/io.h> před #include "funkce.h".
-
Přesně tak, to je tím, že typ uint8_t neexistuje, asi tam nemáte něco includovanýho, třeba stdint.h
-
bomba...stačilo fakt jen přehodit vkladaní těch hlaviček díky moc