как определить постоянный массив в 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++. Работает на моем компьютере в любом случае.