Mam program ANSI C składający się z dwóch plików. Pierwszy plik zawiera funkcję main()
, a drugi plik zawiera inne funkcje, które wywołuje pierwszy plik. Przed definicji main()
funkcji, jakie umieścił następujący kod:Jak uczynić globalną stałą (praca z wieloma plikami) w programie C?
#define PI 3.14159265358979323846
ale 2. Plik nie widział tej zmiennej. Pierwszy plik widzi to dobrze. Następnie umieściłem ten sam wiersz w drugim pliku (zachowując go w pierwszym pliku, jak wyżej), przed definicjami funkcji, ale wciąż drugi plik go nie widzi. Rzeczy zawsze kompilują się dobrze, ale gdy śledzimy zmienną PI w gdb, pokazuje ona, w jaki sposób PI jest stałą globalną widoczną dla wszystkich plików skompilowanych w aplikacji?
EDIT/UPDATE:
Na podstawie odpowiedzi do tej pory stworzyłem następujący plik:
myheader.h
#ifndef my_header_stuff
#define my_header_stuff
#define PI 3.1415926535897932384626433832795
#endif
oraz w dwóch plikach chcę aby zobaczyć tę stałą wartość PI, dodałem ten plik w następujący sposób:
file1.c
#include <stdio.h>
#include <stdlib.h>
#include "myheader.h"
int main(void) {
etc...
}
i file2.c
#include <stdio.h>
#include <stdlib.h>
#include "myheader.h"
double interesting_function(void) {
etc...
}
Pytania:
Kiedy używać GDB do debugowania,
b PI
zwraca (w obu plikach, sam wynik) „No symbol "PI" w obecnym kontekście ". Jednak matematyka w zależności od PI jest obliczana poprawnie. Czy istnieje sposób, aby wyświetlić PI w gdb?Czy mogę dołączyć również dwie linie dla stdio i stdlib w pliku
myheader.h
?Czy mogę dołączyć także prototypy funkcji do pliku
myheader.h
? Jeśli tak, a następnie powiedzmy, że tworzę plik 3 .c, który nie wymaga żadnego z tych prototypów, ponieważ nie korzysta z tych funkcji, czy wyrządzono jakąkolwiek szkodę?
Zawsze umieszczaj wszystkie definicje w plikach .c i deklaracjach (w tym makrach) w plikach .h.To powinno rozwiązać problem w 99% przypadków. – JosephH
Dzięki JosephH, czy możesz mi pomóc w tej mechanice? Zobacz moją próbę powyżej. – ggkmath
Zobacz odpowiedź, którą właśnie napisałem: – JosephH