struktura projektu w C

0

Witam, muszę przyznać na wstępie, że mam poważny problem z przestawienia się z języków skryptowych do programowania w języku C. Prosiłbym o Waszą radę / refleksję odnośnie dzielenia kodu na mniejsze fragmenty (pliki). Generalnie przywykłem do inkludowania potrzebnych plików stąd linkier i "make'owanie" wydają się być nienaturalne.

Mam coś takiego w projekcie: folder library (kod, który ma być dostępny dla serwera i klienta np. jakiś typ wyliczeniowy dla pakietów - NIE JEST to biblioteka współdzielona typu so...czysty kod), server , client itd.
W wielu plikach potrzebuje mieć dostęp do niestety zmiennych globalnych, struktur, stałych, funkcji. Z funkcjami problemu nie mam, udało mi się ich deklarację wyodrębnić do plików nagłówkowych a potem poinstruować konsolidator by dołączył definicje. Zmienne też nie stanowią problemu (w plikach nagłówkowych korzystam z modyfikatora extern)...ale struktury są problemem nie mogę ich przenieść do plików nagłówkowych, ich definicja musi być w jakimś pliku źródłowym, którego nie mogę (a muszę) dołączyć do innych plików (gdzie też są wykorzystywane) - sztuczka z #ifndef w takim układzie (gdzie każdy plik jest osobno kompilowany) nie zadziała.

Wycinek z mojego Makefile

CC=gcc
CFLAGS=-g
LFLAGS=
OBJS=server.o logon.o config.o
HDIR="../library"

server: $(OBJS)
	$(CC) $(LFLAGS) $^ -o $@

server.o: server.c 
	$(CC) $(LFLAGS) -c $< -I$(HDIR) -Ipackage

logon.o: package/logon.c
	$(CC) $(LFLAGS)-c $<

config.o: ../library/config.c
	$(CC) $(LFLAGS)-c $<

clean:
	rm *.o

trochę namieszałem bo samemu mi się już to wymieszało..w jaki sposób dzielić i łączyć kod w C ?? Czy powinienem darować sobie make i kompilować tylko jeden plik w którym będą inkludy do plików źródłowych (bez nagłówków), a w plikach gdzie wystąpią zależności umieszczać #ifndef i ponownie inkludować pliki źródłowe, które w danym pliku są wymagane ?? trochę mi to przypomina programowanie skryptów..bez konsolidatora..

3

W wielu plikach potrzebuje mieć dostęp do niestety zmiennych globalnych, struktur, stałych, funkcji.

kill it with fire i zacznij pisać od nowa
2. Ściągnij kurs C i zacznij od podstaw bo piszesz tu jakieś głupoty.
3.

ale struktury są problemem nie mogę ich przenieść do plików nagłówkowych, ich definicja musi być w jakimś pliku źródłowym, którego nie mogę (a muszę) dołączyć do innych plików (gdzie też są wykorzystywane) - sztuczka z #ifndef w takim układzie (gdzie każdy plik jest osobno kompilowany) nie zadziała.

Bzdura, o ile to nie są C++ szablony, a wątpię żeby były. Jedyne czego może ci brakować to deklaracje zapowiadające. Pokaż przykład kiedy "nie mozesz" wyciągnąć struktury do nagłówka.

Musisz zrozumieć tu pewne rozgraniczenie:
Do kompilacji potrzebne są zwykle deklaracje (np. kompilator musi wiedzieć że dupa() jest funkcją i co ta funkcja zwraca i jakie ma argumenty żeby móc zweryfikować czy dobrze jej używasz), ale definicje (co funkcja robi) nie jest na tym poziomie potrzebne. Potrzebne jest dopiero jak chcesz to odpalić. Ale wtedy możesz zlinkować sobie pliki *.o i nie będzie problemu bo program będzie miał ciało funkcji.
Ze strukturami jest trochę inaczej. Zauważ, że jak w kodzie masz ala.dupa to kompilator musi na etapie kompilacji wiedzieć czy struktura ala ma pole dupa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1