在C文件中
// f1.c
const uint8_t C_VAL=2;` 在C++文件中,我声明了简单数组
// f2.cpp
extern "C" const uint8_t C_VAL;
char charray[C_VAL];生成输出:
#259: constant value is not known
在.C中链接外挂时没有任何错误
// f2.c
extern const uint8_t C_VAL;
char charray[C_VAL];效果很好。
看来问题在于联系。有可能修好吗,怎么解决?这个问题只存在于MDK-ARM或其他编译器中吗?
发布于 2016-10-04 10:17:02
C支持可变长度数组(自C99以来,但仅自C11以来可选)。一些早期的编译器支持它们作为语言扩展),因此在编译C_VAL时不需要知道f2.c的值,因此没有问题。
C++不支持可变长度数组(除了一些编译器支持它们作为语言扩展),因此在编译f2.cpp时必须知道C_VAL的值。因为它仅仅是声明的,所以它的值是未知的,这就是为什么编译器会显示引用的错误。在将f2.cpp和f1.c的对象文件链接在一起之前,该值仍然是未知的。
解决方案:要么使用支持VLA的语言(如C99),要么使用支持VLA的编译器作为扩展(请参阅编译器手册中的它是否支持它,以及如何启用支持),或者使用编译时已知的长度定义数组。
https://stackoverflow.com/questions/39849169
复制相似问题