我在0x102地址中有一个整数值,我需要创建#define ABC ...
宏
ABC是变量或其他东西(访问0x102单元格)
必须可以这样做:
ABC = 666;
int x = ABC*2 + 4;
int *p = &ABC;
你能帮助我吗?
答案 0 :(得分:7)
假设您的对象是16位(地址0x102是2字节对齐):
#define ABC (*(volatile uint16_t *) 0x102)
答案 1 :(得分:1)
你可以这样做:
#define ABC *((int*)0x102)
int main() {
ABC = -1;
return 0;
}
设置int*
,然后一次性推断它。
答案 2 :(得分:0)
如果您将地址作为常量,则可以写:
#define ABC (*(int *)0x102)
如果您在该地址中有变量(名称为my_variable
):
你想要的是C ++调用的引用。在C中,它不存在。但是,正如您所猜测的那样,您可以使用宏。
如果此变量与ABC
的范围相同,您只需要:
#define ABC my_variable
如果你有一个指向这个变量的指针(例如作为一个函数参数),你可以这样写:
#define ABC (*that_argument)
答案 3 :(得分:0)
编译时编译器将#defined变量替换为实际值。
所以,如果你#define ABC
1)ABC = 666;
你将无法执行此操作。
2)int x = ABC*2 + 4;
您将能够执行此操作
3)int *p = &ABC;
你将无法执行此操作。
答案 4 :(得分:0)
您可以通过添加编译时宏来实现。如果使用IDE,则可以在项目设置的预处理器字段中添加ABC=(*(int*)0x102)
它。或者,如果您使用的是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;
}