2011-07-31 32 views
11

Jak zdefiniować stałą 1 lub 2 tablicę wymiarową w C/C++? Mam do czynienia z platformą osadzoną (Xilinx EDK), więc zasoby są ograniczone.jak zdefiniować stałą tablicę w c/C++?

chciałbym pisać w trzeciej pliku nagłówka coś jak

#define MYCONSTANT 5 

ale na tablicy. Podobnie jak

#define MYARRAY(index) { 5, 6, 7, 8 } 

Jaki jest najczęstszy sposób to zrobić?

+0

Oparty na makrach rozwiązanie zastosowane w pierwszym przykładzie nie działa. Gdzieś w pamięci musi zostać przydzielona faktyczna tablica, tak jak w odpowiedzi sbi: –

+0

Proszę, trochę opracuj. Czy ciągła tablica oznacza, że ​​nie chcesz, aby tablica była zmieniana na późniejszym etapie lub czymś innym. –

+0

@Aditya Kumar - zgadza się. Chcę zdefiniować zestaw stałych w oddzielnych plikach i uzyskać do nich dostęp za pomocą indeksu liczb całkowitych z głównego pliku źródłowego. –

Odpowiedz

18

w C++ pliku źródłowego

extern "C" const int array[] = { 1, 2, 3 }; 

w pliku nagłówka, które należy uwzględnić zarówno w C i C++ pliku źródłowego

#ifdef __cplusplus 
extern "C" { 
#endif 
extern const int array[]; 
#ifdef __cplusplus 
} 
#endif 
17

W C++ Najczęstszym sposobem zdefiniowania stałą tablicę pewnością należy do ERM, zdefiniować stałą tablicę:

const int my_array[] = {5, 6, 7, 8}; 

masz żadnego powodu, aby przypuszczać, że nie będzie jakiś problem na tej platformie osadzonej?

+1

w porządku. I gdzie go zdefiniować - plik nagłówkowy/źródłowy? Po zdefiniowaniu w pliku h innej firmy (jest to osobny sterownik dla systemu mikroprocesorowego) - pojawia się błąd - coś takiego jak "tej zmiennej nie można zdefiniować wiele razy". –

+0

kiedy definiuję go w pliku źródłowym - nie można uzyskać do niego dostępu z pliku main.cc (w którym dodam mydriver.h) –

+2

Więc piszesz w C? Udało ci się wybrać kilka obszarów, w których ten sam kod będzie działał inaczej w językach C i C++, dlatego należy określić, który język – jahhaj

4

W C++

const int array[] = { 1, 2, 3 }; 

To było dość łatwe, ale może ja nie rozumiejąc swoje pytanie poprawnie. Powyższe nie będzie działać w C, jednak proszę określić, w jakim języku jesteś naprawdę zainteresowany. Nie ma takiego języka jak C/C++.

+0

Dlaczego to nie działa w C? Myślałem, że C skopiował 'const' z C++ przez, myślę, że C89? – sbi

+0

Jeśli zostało to umieszczone w pliku nagłówkowym, a plik nagłówkowy został zawarty w więcej niż jednym pliku źródłowym, w C pojawi się błąd wielu definicji, w C++ nie. Const nie ma dokładnie tego samego znaczenia w C i C++. – jahhaj

+0

za konkret - moja aplikacja składa się ogólnie z 2 części - programu głównego napisanego w C++ i sterownika rdzenia peryferyjnego napisanego w czystym C (ponieważ jest skompilowany jako część pakietu wsparcia płyty). –

1

Nie można zdefiniować stałej array za pomocą dyrektywy definiującej.

0

miałem podobny problem. W moim przypadku potrzebowałem tablicy stałych, aby wykorzystać ją jako rozmiar innych macierzy statycznych. Kiedy próbowałem użyć

const int my_const_array[size] = {1, 2, 3, ... }; 

a następnie zadeklarować:

int my_static_array[my_const_array[0]]; 

pojawia się błąd z mojego kompilatora:

array bound is not an integer constant 

Tak, w końcu zrobiłem następujące (Być może istnieją bardziej eleganckie sposoby na zrobienie tego):

#define element(n,d) ==(n) ? d : 
#define my_const_array(i) (i) element(0,1) (i) element(1,2) (i) element(2,5) 0 
Powiązane problemy