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

sny*_*sny 3 c c++ visual-studio-2010

char B[200];
Run Code Online (Sandbox Code Playgroud)

在静态库中.它被称为

extern char B[];  // (1)
Run Code Online (Sandbox Code Playgroud)

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

extern char B[200]; // (2)
Run Code Online (Sandbox Code Playgroud)

平稳的编译器.

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

extern "C" { ... }
Run Code Online (Sandbox Code Playgroud)

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

PS我把200放在简单.它是库附带的头文件中定义的常量.

库头:

#define MAXLEN 200
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*k B 9

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

  • 实际上,库应该在其头文件中定义`const size_t BSIZE = sizeof(B);`和`extern const size_t BSIZE;`,或者使用函数来返回大小(函数方法在共享库和位置上更好地工作 - 独立代码). (4认同)