在sizeof命令的extern语句中指定char数组大小

时间:2011-01-20 20:10:29

标签: c++ c visual-studio-2010

char B[200];

在静态库中。它被称为

extern char B[];  // (1)

在客户端代码中包含的标头中。 一旦我需要使用sizeof(B)编译器抱怨并改为

extern char B[200]; // (2)

平息编译器。

库和客户端代码是c ++,但它使用C链接(头文件的extern声明包围着

extern "C" { ... }

如果我使用(2)而不是(1),是否有任何潜在的问题?

P.S。为了简单起见我放了200。它是库附带的头文件中定义的常量。

库标题:

#define MAXLEN 200

实际上,即使它不是库,但在单独的文件(编译单元)中,问题也是类似的。

有没有办法(1)可以在这个大的旧代码中使用,我可能会使用(2)打破?

2 个答案:

答案 0 :(得分:9)

如果库实现改变了B的大小,那么你将会遇到不匹配以及可能出现的各种错误。库编写器应该提供一个描述数组大小的常量。正如评论中所指出的,图书馆作者可以通过sizeof(b)编写的常量或函数轻松地提供此功能,以使其对库中的更改具有很强的适应性。

答案 1 :(得分:2)

我有同样的问题。这篇文章解释了它。

http://c-faq.com/decl/extarraysize.html

非常明显但我之前没想过:)