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)打破?
如果库实现有所改变,B
那么你将会遇到不匹配的问题以及可能出现的各种错误.库编写器应该提供一个描述数组大小的常量.如评论中所述,库编写者可以通过编写的常量或函数轻松地提供此功能,sizeof(b)
以使其对库中的更改具有很强的适应性.
归档时间: |
|
查看次数: |
1482 次 |
最近记录: |