【发布时间】:2016-10-04 09:48:39
【问题描述】:
在 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中链接extern时没有任何错误
// f2.c
extern const uint8_t C_VAL;
char charray[C_VAL];
工作正常。
似乎问题出在链接上。能不能修,怎么修?这个问题是只有MDK-ARM还是其他编译器才有?
【问题讨论】:
-
你在哪里声明
char charray[C_VAL];?在函数内部我们的函数外部`? -
C 和 C++ 是不同的语言。为什么您希望它们具有相同的功能?
-
如果你使用 gcc,你可能可以使用
-std=gnu++11或其他东西来启用扩展以支持 C++ 代码上的可变长度数组。 -
@Olaf,这是 Stroustrup 在设计 C++ 语言时的设计目标之一,即来自 C++ 的 C 代码的可用性。这是一个非常简单的例子,它展示了一些应该起作用的东西。所以我认为你的评论超出了这里的范围。在我们分享的许多问题中,我支持并关注你,但这次我不能这样做。
-
@LuisColorado:对于标准前的 C++ 和古老的 C90 来说,这可能是正确的。历史悠久的 K&R-C。特别是
const限定符在两种语言中具有不同的语义,更不用说其他不兼容了。相同的语法并不意味着相同的语义。仅仅使用一些 C 库就会使任何问题成为 C 问题!阅读和比较标准会有所帮助!关于。 Stroustrup 曾经写道:Linus Torvalds 曾经写道,Linux 永远不会被移植到 x86 以外的任何地方......