我为微控制器编写代码,程序看起来像这样, 这不是真正的程序,它只是提出问题的一个例子。
我想表明如果我指向内存中的某个位置并在头文件中定义指针,我就无法调用源文件中定义的数组。
test.h:
#define arr * (BYTE *)(0X10000);
int function(int i);
test.c的:
#include "test.h"
int function(int i){
arr[5] = 1;
}
问题是:
undefined identifier "arr"
怎么可能无法识别呢?
答案 0 :(得分:1)
让我假设0x10000
是微控制器内寄存器的精确起始地址,并且您希望在那里写入一些字节。然后我会#define
我的别名如下:
#define MY_REGISTER (BYTE*)((void*)0x10000)
在这种情况下,可以使用MY_REGISTER
宏作为初始化程序:
BYTE* myRegister = MY_REGISTER;
myRegister[5] = 1;
注意:未指定MCU和编译器,我无法测试我的答案。
答案 1 :(得分:0)
指令必须与#
在同一行:
而不是
#
define arr * (BYTE *)(0X10000);
和
#
include "test.h"
使用
#define arr * (BYTE *)(0X10000);
和
#include "test.h"
(它将解决你的问题
未定义的标识符“arr”
但是会出现其他问题。)
答案 2 :(得分:0)
好的,这是你的第一个问题,你不能改变常数。无论错误#define
和arr
分配如何,您都试图将上面定义的arr更改为常量。
#define arr * (BYTE *)(0X10000) //; - you don't need a semicolon after define
接下来,您正尝试为arr
分配一个新值,这是一个否定号:
arr[5] = 1; //cannot change a constant
您可以指定另一个阵列,但您可能不希望这样:
int arr[5];
arr[5] = 1;
但是你可以这样做:
#undef arr
#define arr 1