[C] praca z wieloma plikami .c oraz .h
Ostatnio zmodyfikowano 2014-12-14 10:55
Edward Temat założony przez niniejszego użytkownika |
[C] praca z wieloma plikami .c oraz .h » 2014-12-13 18:24:52 Proszę powiedźcie co robię źle.
//============= teraz.c ===========
#include <stdio.h> #include "plik1.h" #include "plik2.h"
int main(void) { int b = 3, wynik; wynik = kwadrat(b)+razydwa(b); printf("%d",wynik); return wynik; }
//============= plik1.h ===========
int kwadrat(int a);
//============= plik1.c ===========
#include "plik1.h" #include "stale.h"
int kwadrat(int a) { int w; w = a*a+RAZ+dwa; return w; }
//============= plik2.h =========== int razydwa(int a);
//============= plik2.c ===========
#include "plik2.h" #include "stale.h"
int razydwa(int a) { int e; e = 2*a+RAZ+dwa; return e; }
//============= stale.h =========== #ifndef STALE #define STALE #define RAZ 100
int dwa = 50; #endif
/////////////////////////////// plik główny to teraz.c błąd jaki dostaję że zmienna dwa jest podwójnie zdefiniowana z góry dzięki za pomoc. |
|
GolemXIV |
» 2014-12-13 18:38:52 Po skończeniu kompilacji poprzedniego pliku c, a przed rozpoczęciem kompilacji następnego dotychczas zdefiniowane makra się nie przenoszą. Do wnętrza #ifndef STALE kompilator zagląda dwa razy - po razie przy kompilacji każdego pliku. W związku z tym w Twoim programie dwa razy jest użyta definicja: int dwa = 50; To nie jest deklaracja, że gdzieś tam, kiedyś, będzie zdefiniowana. To jest definicja. że zmienna dwa występuje tu, w tym miejscu. W sumie dwa niezależne razy. |
|
Edward Temat założony przez niniejszego użytkownika |
» 2014-12-14 10:03:16 Dzięki za odpowiedź.
Okej walczyłem z tym i wystarczy wprowadzić mała modyfikację
//============= stale.h =========== #ifndef STALE #define STALE #define RAZ 100
int dwa; //<-- sama deklaracja #endif
zrobić jeszcze jedne plik
//============= stale.h =========== int dwa=50; //<-- tu w sumie trzeba drugi raz użyć int
wówczas program działa. Czy jest to poprawne rozwiązanie?
Przy okazji te informacje są mi potrzebne bo robię większy program mam też pytanie bo zwykle pracowałem z jednym plikiem .c
Czy poniższy układ jest okej dodam, że się poprawnie kompiluje tylko pytanie czy może być, że biblioteki się na wzajem ładują. Czy powinienem popracować na inną architekturą o to o co mi chodzi.
Najlepiej by było dać obrazek, ale postaram się to opisać Oznaczenie a-->b w pliku b jest wpisane #include "a"
f_lcd.h-->f_lcd.c f_inne.h-->f_inne.c f_mouse.h-->f_mouse.c f_obliczenia.h-->f_obliczenia.c
f_lcd.h-->start.c f_inne.h-->start.c f_mouse.h-->start.c f_obliczenia.h-->start.c
ponadto <stdio.h>-->f_lcd.c f_inne.h-->f_lcd.c
f_inne.h-->f_mouse.c f_obliczenia.h-->f_mouse.c <math.h>-->f_obliczenia.c
Swoją drogą czy możecie polecić jakieś materiały do przestudiowania ap ropo pracy z wieloma plikami, architektura załączeń w kontekście języka C ewentualnie c++
Z góry dziękuję za odpowiedź
|
|
Monika90 |
» 2014-12-14 10:55:51 Czy jest to poprawne rozwiązanie? |
Nie jest, użyj extern. |
|
« 1 » |