/ / Czy definiujesz zmienne globalne w bibliotece C? - c, zmienne globalne, biblioteki statyczne

Czy definiujesz zmienne globalne w bibliotece C? - c, zmienne globalne, statyczne-biblioteki

Obecnie mam powyżej zdefiniowane podprogramy i zmienne globalne main(). Próbuję utworzyć bibliotekę w C. Czy mogę zadeklarować zmienne globalne w pliku nagłówkowym?

Odpowiedzi:

8 dla odpowiedzi № 1

Czy mogę zadeklarować zmienne globalne w pliku nagłówkowym?

Tak, możesz zadeklarować swoje zmienne globalne w pliku nagłówkowym. Jednak muszą to być deklaracje, a nie definicje zmiennych globalnych.

Innymi słowy, nagłówek powinien powiedzieć

// This goes into the header
extern int my_global_int;

i plik C powinien powiedzieć

int my_global_int;

Uwaga: Fakt, że ty mogą czy to nie znaczy, że ty powinien Zrób to. Ujawnianie „surowych” zmiennych globalnych z biblioteki jest złą praktyką, ponieważ użytkownicy Twojej biblioteki mogą robić im nieoczekiwane rzeczy.

Lepszym podejściem byłoby ukrycie twoich globali poprzez ich tworzenie statici udostępnianie funkcji do manipulowania nimi:

// This goes into the header
int get_global();
void set_global(int n);

// This goes into the C file
static int my_former_global;

int get_global() {
return my_former_global;
}
void set_global(int n) {
if (<n-is-valid>) {
my_former_global = n;
}
}

1 dla odpowiedzi nr 2

Spróbuj zminimalizować użycie zmiennych globalnych jakosprawiają, że program jest mniej czytelny i podatny na błędy. Biblioteki należy używać poprzez interfejs (przekazywanie danych tam i z powrotem między zapewnianymi funkcjami), a nie poprzez dostęp do zmiennych globalnych.

W sytuacjach, gdy naprawdę nie ma innego wyjścia,na przykład współużytkowanie danych w procedurze obsługi przerwań, spróbuj na przykład zachować zmienne zawarte w tej jednostce kompilacji, ustawiając je na statyczne, aby nie mogły zakłócać działania innych bibliotek.

Jeśli z jakiegoś powodu naprawdę potrzebujesz zmiennej globalnej, zdefiniuj ją w pliku kodu (plik c) i zadeklaruj jako zewnętrzną w pliku nagłówkowym.


0 dla odpowiedzi № 3

Odpowiedź brzmi: tak i nie. Tak, możesz zadeklarować zmienne globalne w pliku nagłówkowym, ale nie, nie powinieneś deklarować zmiennych globalnych, szczególnie jeśli chcesz wdrożyć bibliotekę. Lub przynajmniej ostrożnie wybierz zmienne, które trafią do przestrzeni globalnej, a następnie spróbuj ponownie przemyśleć jeśli są naprawdę przydatne lub lepiej byłoby przechowywać zmienne w niektórych strukturach kontekstowych.


0 dla odpowiedzi nr 4

Nie powinno być problemu, możesz też zadeklarować je w .c i użyć extern w pliku .h


0 dla odpowiedzi № 5

Tak, możesz, ale to zły nawyk; nie rób tego .