wake-up-neo.com

wie definiere ich ein konstantes Array in c/c ++?

So definieren Sie ein konstantes eindimensionales oder zweidimensionales Array in C/C++? Ich arbeite mit Embedded Platform (Xilinx EDK), sodass die Ressourcen begrenzt sind.

Ich möchte in eine Header-Datei von Drittanbietern etwas schreiben

#define MYCONSTANT 5

aber für Array. Mögen

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

Was ist der üblichste Weg, dies zu tun?

11
Andrey Pesoshin

In der C++ - Quelldatei

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

In der Headerdatei, die in der C- und C++ - Quelldatei enthalten sein soll

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

In C++ sollte der gebräuchlichste Weg zum Definieren eines konstanten Arrays sicherlich sein: erm, ein konstantes Array definieren

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

Haben Sie Grund zu der Annahme, dass auf dieser Embedded-Plattform Probleme auftreten würden? 

17
sbi

In C++

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

Das war leicht genug, aber vielleicht verstehe ich Ihre Frage nicht richtig. Obiges funktioniert nicht in C, bitte geben Sie jedoch an, für welche Sprache Sie sich wirklich interessieren.

4
jahhaj

Mit der define-Direktive kann keine array-Konstante definiert werden.

2
undone

Ich hatte ein ähnliches Problem. In meinem Fall brauchte ich ein Array von Konstanten, um andere statische Arrays als Größe verwenden zu können. Als ich versuchte, die

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

und dann erklären:

int my_static_array[my_const_array[0]];

Ich bekomme eine Fehlermeldung von meinem Compiler:

array bound is not an integer constant

Also habe ich schließlich folgendes getan (vielleicht gibt es elegantere Möglichkeiten, das zu tun):

#define element(n,d) ==(n) ? d :
#define my_const_array(i) (i) element(0,1) (i) element(1,2) (i) element(2,5) 0
0
Ojos
#include <string>
#include <iostream>
#define defStrs new string[4] { "str1","str2","str3","str4" }
using namespace std;
...

const string * strs = defStrs;
string ezpzStr = strs[0] + "test" + strs[1];

cout << ezpzStr << endl;

Ich habe eine Weile gebraucht, um das herauszufinden, aber anscheinend funktioniert es in C++ so. Funktioniert auf my Computer trotzdem.

0
Silikiln