2011-12-04 1 views
1

これは愚かな質問ですが、私はそれを解決することができず、それは私を苛立たせ始めています!#defineを使って配列にインデックスを付ける?

は、私は次の(REGがグローバルである)を持つ:今

#define CS 4 
#define DS 5 

unsigned char reg[6] = {0, 0, 0, 0, 0, 0x10}; 

が、私はREGが[DS]配列REG(0x10を)の要素5にアクセスすることを期待します。ただし、デバッグ(VC2010)時に、Visual StudioはDSがゼロであり、最初の要素にアクセスすると主張しています。それは私ですか、またはVisual Studioは愚かですか?

+0

ほとんどの場合、実行時に#defineの値を正確にチェックしますか? –

+0

DS値を印刷しようとしましたか? – Oleg

+0

代わりにenumを使用してみませんか? –

答えて

5

はい。あなたは、コード内のマクロDSどこかに再定義していない限り

reg[DS] == 0x10 


マクロは、事前コンパイル時に評価されます。したがって、DS5と定義した場合、コンパイルのためのコンパイラはreg[5]になります。

また、マクロ値は実行時に存在しないため、実行時にチェックすることはできません。すでに定義されている値で置き換えられます。

1

reg[DS]は、regの5番目の(つまり、最後の)要素を指していると理解しています。

他の要素がアクセスされている可能性があると思われる場合は、DSを別の値に再定義しないように注意してください。DSは、あなたが含むヘッダー。

実行時にDSが存在しないことに注意してください。たとえコンパイラでさえもDSが表示されないのは、プリプロセッサによって5に置き換えられているためです。これがデバッガをトリプルアップする可能性があります。

関連する問題