как определить постоянный массив в c/c++?

Как определить постоянный 1 или 2 мерный массив в C/C++? Я занимаюсь встроенной платформой (Xilinx EDK), поэтому ресурсы ограничены.

Я хотел бы написать в стороннем заголовочном файле что-то вроде

#define MYCONSTANT 5

но для массива. подобно

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

Каков наиболее распространенный способ сделать это?

Ответ 1

В исходном файле C++

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

В заголовочный файл, который должен быть включен как в исходный файл C, так и C++

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

Ответ 2

В C++ наиболее распространенным способом определения константного массива должно быть, конечно, определить постоянный массив:

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

У вас есть основания предполагать, что на этой встроенной платформе возникнет какая-то проблема?

Ответ 3

В C++

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

Это было достаточно легко, но, возможно, я не правильно понимаю ваш вопрос. Вышеуказанное не будет работать на языке C, однако, пожалуйста, укажите, на каком языке вас действительно интересует. Не существует такого языка, как C/C++.

Ответ 4

Невозможно определить константу array с помощью директивы define.

Ответ 5

У меня была аналогичная проблема. В моем случае мне понадобился массив констант для использования в качестве других статических массивов. Когда я попытался использовать

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

а затем объявите:

int my_static_array[my_const_array[0]];

Я получаю сообщение об ошибке от моего компилятора:

array bound is not an integer constant

Итак, наконец, я сделал следующее (возможно, есть более элегантные способы сделать это):

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

Ответ 6

#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;

Мне потребовалось некоторое время, чтобы понять это, но, очевидно, это работает так в C++. Работает на моем компьютере в любом случае.