Как определить постоянный массив в C / C ++? - PullRequest
11 голосов
/ 01 августа 2011

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

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

#define MYCONSTANT 5

но для массива. Как

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

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

Ответы [ 6 ]

19 голосов
/ 01 августа 2011

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

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

В заголовочном файле для включения в исходный файл C и C ++

#ifdef __cplusplus
extern "C" {
#endif
extern const int array[];
#ifdef __cplusplus
}
#endif
17 голосов
/ 01 августа 2011

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

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

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

4 голосов
/ 01 августа 2011

В C ++

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

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

3 голосов
/ 01 августа 2011

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

0 голосов
/ 21 апреля 2019
#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 ++.Все равно работает на моем компьютере.

0 голосов
/ 07 июля 2014

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...