有
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)打破?
答案 0 :(得分:9)
如果库实现改变了B
的大小,那么你将会遇到不匹配以及可能出现的各种错误。库编写器应该提供一个描述数组大小的常量。正如评论中所指出的,图书馆作者可以通过sizeof(b)
编写的常量或函数轻松地提供此功能,以使其对库中的更改具有很强的适应性。
答案 1 :(得分:2)
http://c-faq.com/decl/extarraysize.html
非常明显但我之前没想过:)