对于C,一直以为, 数组和指针可以不分, 今天遇到一个extern 的问题,才发现不是这样。
Keil ARM/stm32F103, 代码:
文件 file1.c
char name[16]="1234"
文件 file2. c
extern char *name;
func()
{
name[0]=8;
}
编译没有异常,调试时发现只要执行func, 就会发生reset。
看编译代码,func内是这样的:
ldr r0, [pc,#10] //R0= name
ldr r0, [r0,#00] //??????
movs r1, #8 // r1=8
strb r1,[r0,#00] // r0[0]= r1
原来, extern char * name 被编译为, char **!!!!, 奇怪编译器不报warning.
改成extern char name[], 程序就好了。