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 № 1Czy 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 static
i 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 .