我在0x102地址中有一個整數值,我需要創建#define ABC ...
宏。
ABC是可變的或什麼(訪問0x102單元格)。
必須能夠做到操作是這樣的:如何「定義」這個變量?
ABC = 666;
int x = ABC*2 + 4;
int *p = &ABC;
你能幫助我嗎?
我在0x102地址中有一個整數值,我需要創建#define ABC ...
宏。
ABC是可變的或什麼(訪問0x102單元格)。
必須能夠做到操作是這樣的:如何「定義」這個變量?
ABC = 666;
int x = ABC*2 + 4;
int *p = &ABC;
你能幫助我嗎?
假設你的對象是16位(地址0x102爲2個字節對齊):
#define ABC (*(volatile uint16_t *) 0x102)
我喜歡你的圓括號和'volatile'比我的回答更好。 – Flexo 2012-07-13 12:22:30
感謝您的幫助:) – 2012-07-13 12:30:59
你可以這樣說:
#define ABC *((int*)0x102)
int main() {
ABC = -1;
return 0;
}
它設置int*
然後deferences它一氣呵成。
如果該地址是一個常數,你可以寫:
#define ABC (*(int *)0x102)
如果在該地址的變量(以如my_variable
名):
你想要的是什麼C++調用引用。在C中,它不存在。但是,您可以像您猜測的那樣爲它使用宏。
如果這個變量是在相同的範圍內ABC
,所有你需要的是:
#define ABC my_variable
如果你有一個指向該變量(例如作爲函數參數),你可以寫這樣的事情:
#define ABC (*that_argument)
作爲編譯時間,編譯器將#defined變量替換爲實際值。
所以,如果你#define ABC
1)ABC = 666;
您將無法執行此操作。
2)int x = ABC*2 + 4;
您將能夠藉此在此操作
3)int *p = &ABC;
您將無法執行此操作。
您可以通過添加編譯時宏來實現。如果您使用的是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;
}
你怎麼知道* *它會在地址'0x102'? – ArjunShankar 2012-07-13 12:17:48
@ArjunShankar也許他正在使用嵌入式系統? – 2012-07-13 12:19:41
btw how'bout'#define ABC ABC'? – 2012-07-13 12:20:13