首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外部"C“常量在.cpp中不为已知,而在.c中工作

外部"C“常量在.cpp中不为已知,而在.c中工作
EN

Stack Overflow用户
提问于 2016-10-04 09:48:39
回答 1查看 1.2K关注 0票数 2

在C文件中

代码语言:javascript
复制
// f1.c
const uint8_t C_VAL=2;`  

在C++文件中,我声明了简单数组

代码语言:javascript
复制
// f2.cpp
extern "C" const uint8_t C_VAL;
char charray[C_VAL];

生成输出:#259: constant value is not known

在.C中链接外挂时没有任何错误

代码语言:javascript
复制
// f2.c
extern const uint8_t C_VAL;
char charray[C_VAL];

效果很好。

看来问题在于联系。有可能修好吗,怎么解决?这个问题只存在于MDK-ARM或其他编译器中吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-04 10:17:02

C支持可变长度数组(自C99以来,但仅自C11以来可选)。一些早期的编译器支持它们作为语言扩展),因此在编译C_VAL时不需要知道f2.c的值,因此没有问题。

C++不支持可变长度数组(除了一些编译器支持它们作为语言扩展),因此在编译f2.cpp时必须知道C_VAL的值。因为它仅仅是声明的,所以它的值是未知的,这就是为什么编译器会显示引用的错误。在将f2.cppf1.c的对象文件链接在一起之前,该值仍然是未知的。

解决方案:要么使用支持VLA的语言(如C99),要么使用支持VLA的编译器作为扩展(请参阅编译器手册中的它是否支持它,以及如何启用支持),或者使用编译时已知的长度定义数组。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39849169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档