如何“#define”这个变量?

时间:2012-07-13 12:16:19

标签: c pointers memory-management

我在0x102地址中有一个整数值,我需要创建#define ABC ...宏 ABC是变量或其他东西(访问0x102单元格) 必须可以这样做:

ABC = 666;  
int x = ABC*2 + 4;  
int *p = &ABC;  

你能帮助我吗?

5 个答案:

答案 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;
}