我为微控制器编写代码,程序看起来像这样,这不是真正的程序,它只是提出问题的一个例子。
我想表明,如果我指向内存中的一个位置并在头文件中定义指针,则无法调用源文件中定义的数组。
测试.h:
#define arr * (BYTE *)(0X10000);
int function(int i);
测试.c:
#include "test.h"
int function(int i){
arr[5] = 1;
}
问题是: undefined identifier "arr"
怎么可能认不出来呢?
让我假设0x10000
是微控制器内寄存器的确切起始地址,并且您希望在其中写入一些字节。然后我会#define
我的别名如下:
#define MY_REGISTER (BYTE*)((void*)0x10000)
在这种情况下,您可以使用 MY_REGISTER
宏作为初始值设定项:
BYTE* myRegister = MY_REGISTER;
myRegister[5] = 1;
注意:没有指定MCU和编译器,我无法测试我的答案。
必须与#
在同一行:
而不是
#
define arr * (BYTE *)(0X10000);
和
#
include "test.h"
用
#define arr * (BYTE *)(0X10000);
和
#include "test.h"
(它将解决您的问题
未定义的标识符"arr">
但其他问题将会出现。
好的,这是你在这里的第一个问题,你不能改变常量。不管糟糕的#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