web-dev-qa-db-ja.com

c / c ++で定数配列を定義する方法は?

C/C++で定数1または2次元配列を定義する方法は?エンベデッドプラットフォーム(Xilinx EDK)を扱っているため、リソースが限られています。

次のようなサードパーティのヘッダーファイルに書き込みたい

#define MYCONSTANT 5

しかし、配列用。お気に入り

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

これを行う最も一般的な方法は何ですか?

12
Andrey Pesoshin

C++ソースファイル内

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

CおよびC++ソースファイルの両方に含まれるヘッダーファイル

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

C++では、定数配列を定義する最も一般的な方法は、間違いなくdefine a constant array

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

その組み込みプラットフォームに何らかの問題があると思われる理由はありますか?

17
sbi

C++で

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

それは十分簡単でしたが、あなたの質問を正しく理解していないかもしれません。上記はCでは動作しませんが、実際に興味のある言語を指定してください。C/ C++などの言語はありません。

4
jahhaj

Defineディレクティブを使用してarray定数を定義することはできません。

4
undone

同様の問題がありました。私の場合、他の静的配列のサイズとして使用するには、定数の配列が必要でした。私が使用しようとしたとき

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

これを理解するのにしばらく時間がかかりましたが、明らかにC++ではこのように動作します。とにかくmyコンピューターで動作します。

0
Silikiln