引用: 引用 1 楼 xqhrs232 的回复:
还有个怪现象
在A。CPP里面定义了
const int? AirBtn_Pos[7][2]
在B。CPP里面引用
extern const int? AirBtn_Pos[7][2]
这样编译老是报错-----1>B.obj : error LNK2001: 无法解析的外部符号 "int (* AirBtn_Pos)[2]" (?AirBtn_Pos@@3PAY01HA)
有重复定义或两次使用时候参数与最先定义时的标准不同可能会造成这样的错误。
为什么?
引用: 引用 1 楼 xqhrs232 的回复:
还有个怪现象
在A。CPP里面定义了
const int AirBtn_Pos[7][2]
在B。CPP里面引用
extern const int AirBtn_Pos[7][2]
这样编译老是报错-----1>B.obj : error LNK2001: 无法解析的外部符号 "int (* AirBtn_Pos)[2]" (?AirBtn_Pos@@3PAY01HA)
为什么?
引用: 引用楼主 xqhrs232 的帖子:
WINCE+ARM的系统,把全局不变的数组加一个const修饰符能起到什么作用?减少内存的占用?提高程序执行速度?ARM下ROM可以当RAM使用吗?
引用: 引用 11 楼 singlerace 的回复:
extern声明的作用是编译时把AirBtn_Pos放入全局符号表,这样链接时接链接器时才能找到。const和非const的区别可能是,非const全局变量如果不指定static,默认情况下放入全局符号表,而const变量不放。这些是我的猜测。
用const修饰的全局变量除了程序中不能修改外,编译器会把它优化成常量处理,相当于C的#define。这样就不需要为它分配空间。
ARM下ROM可以当RAM使用吗?
任何情况下ROM都不能当RAM使,否则还能叫ROM吗。
引用: 引用 13 楼 jgj58 的回复:
在C++里:const可用在全局量上
const定义是带有类型的,定义的是变量,它有实际内存,只是这个内存是不可以更改的。
所以从C++中提倡使用const变量,作用类似#define
引用: 引用 12 楼 xqhrs232 的回复:
我记得有些单片机是可以的------像AT89C55WD。把不变的数组定义成CODE类型就不用占RAM空间的!
引用: 引用 14 楼 xqhrs232 的回复:
引用 13 楼 jgj58 的回复:
在C++里:const可用在全局量上
const定义是带有类型的,定义的是变量,它有实际内存,只是这个内存是不可以更改的。
所以从C++中提倡使用const变量,作用类似#define
这样弄的好处是什么?
引用: 引用 15 楼 singlerace 的回复:
高级的C++编译器在优化后const是不占内存的。