2011-07-31 27 views
11

C/C++で定数1次元または2次元配列を定義する方法は? 私は埋め込みプラットフォーム(ザイリンクスEDK)を扱うため、リソースは限られています。c/C++で定数配列を定義する方法は?

私は、サードパーティのヘッダファイルで

#define MYCONSTANT 5 

のようなが、配列のために何かを書きたいと思います。同様

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

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

+0

マクロベース第1の実施例で使用されているような解決法は機能しない。どこかで、実際の配列はsbiの答え –

+0

のようにメモリに割り当てなければなりません。定数配列とは、後で配列を変更したくないということです。 –

+0

@Aditya Kumar - それは正しいです。私は別のファイルで定数のセットを定義し、メインソースファイルから整数インデックスを使ってそれらにアクセスしたいと思います。 –

答えて

18

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

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

、一定の配列を定義するための最も一般的な方法は、確かにERM、は定数配列定義にする必要があります:

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

をあなたには、いくつかの問題があるだろうと仮定する理由を持っていますかその埋め込みプラットフォームで? Cでは

+1

大丈夫です。そしてそれをどこで定義するのか - ヘッダー/ソースファイル? 私はサードパーティのhファイル(マイクロプロセッサシステム用の別のドライバ)で定義すると、 "この変数を複数回定義することはできません"のようなエラーが表示されます。 –

+0

ソースファイルに定義するとmain.ccファイルからアクセスできません(mydriver.hをインクルードしています) –

+2

Cで記述していますか?あなたはCとC++で同じコードが異なって動作するいくつかの領域を選ぶことができましたので、どの言語を指定してください – jahhaj

4

++十分に簡単だったが、多分私が正しくあなたの質問を理解していないよ

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

。上記はC言語では動作しませんが、本当に興味のある言語を指定してください。C/C++のような言語はありません。

+0

なぜCで動作しないのですか?私はCがC++から 'const'をコピーしたと思った、C89と思う? – sbi

+0

これがヘッダーファイルに置かれ、そのヘッダーファイルが複数のソースファイルに含まれていた場合、Cでは複数の定義エラーが発生します。 ConstはCとC++で全く同じ意味を持ちません。 – jahhaj

+0

- 具体的には、私のアプリケーションは、C++で書かれたメインプログラムと純粋なCで書かれたペリフェラルコアソフトウェアドライバ(ボードサポートパッケージの一部としてコンパイルされているので)の2つの部分から成っています。 –

1

array定数をdefineディレクティブで定義することは不可能です。 CおよびC++の両方のソースファイルに含まれるヘッダファイルにC++ソースファイルで

0

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

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 
関連する問題