0x102 アドレスに 1 つの整数値があり、#define ABC ...
マクロを作成する必要があります。
ABCは変数か何かです(0x102セルにアクセスできます)。
次のような操作を実行できる必要があります。
ABC = 666;
int x = ABC*2 + 4;
int *p = &ABC;
手伝って頂けますか ?
0x102 アドレスに 1 つの整数値があり、#define ABC ...
マクロを作成する必要があります。
ABCは変数か何かです(0x102セルにアクセスできます)。
次のような操作を実行できる必要があります。
ABC = 666;
int x = ABC*2 + 4;
int *p = &ABC;
手伝って頂けますか ?
オブジェクトが 16 ビット (アドレス 0x102 は 2 バイトで整列) であると仮定します。
#define ABC (*(volatile uint16_t *) 0x102)
次のように実行できます。
#define ABC *((int*)0x102)
int main() {
ABC = -1;
return 0;
}
を設定してint*
から、一度にすべてを参照します。
これを行うには、コンパイル時マクロを追加します。ABC=(*(int*)0x102)
IDE を使用している場合は、プロジェクト設定のプリプロセッサ フィールドに追加できます。または、たとえば CLI コンパイラを使用している場合は、gcc
次のようにプログラムをコンパイルできます。
gcc prog.c -DABC=(*(int*)0x102)
または、以下のようにプログラムで直接定義することもできます
#define ABC (*(int *)0x102)
int main()
{
ABC = 666;
int x = ABC*2 + 4;
int *p = &ABC;
return 0;
}
コンパイル時に、コンパイラは #defined 変数を実際の値に置き換えます。
だから、もしあなたが#define ABC
1)ABC = 666;
この操作を実行することはできません。
2)int x = ABC*2 + 4;
この操作を実行できるようになります
3)int *p = &ABC;
この操作を実行することはできません。
アドレスを定数として持っている場合は、次のように記述できます。
#define ABC (*(int *)0x102)
そのアドレスに変数がある場合 ( などの名前my_variable
):
必要なのは、C++ が参照を呼び出すものです。C では、存在しません。ただし、ご想像のとおり、マクロを使用できます。
この変数が と同じスコープにあるABC
場合、必要なのは次のとおりです。
#define ABC my_variable
この変数へのポインターがある場合 (たとえば、関数の引数として)、次のように記述できます。
#define ABC (*that_argument)