C++ 缓冲区大小C/C++;

C++ 缓冲区大小C/C++;,c++,C++,不将缓冲区的大小定义为宏或常量是否被认为是不好的做法 例如: char buffer[1024]; 字符缓冲区[1024]; 而不是: #define BUFF_SIZE 1024 char buffer[BUFF_SIZE]; #定义BUFF_大小1024 字符缓冲区[BUFF_SIZE]; 完全一样。在将代码编译为C/C++代码之前,编译器将把BUFF_SIZE替换为1024 此外,定义总是在名称空间之外。那么,最好定义一个常量变量。一般来说,“幻数”被认为是一种不好的做法,原因有

不将缓冲区的大小定义为宏或常量是否被认为是不好的做法

例如:

char buffer[1024]; 字符缓冲区[1024]; 而不是:

#define BUFF_SIZE 1024 char buffer[BUFF_SIZE]; #定义BUFF_大小1024 字符缓冲区[BUFF_SIZE];
完全一样。在将代码编译为C/C++代码之前,编译器将把
BUFF_SIZE
替换为
1024

此外,定义总是在名称空间之外。那么,最好定义一个常量变量。

一般来说,“幻数”被认为是一种不好的做法,原因有两个。
1) 如果使用有意义的名称命名常量,它将成为自文档化的,从而提高代码的可读性

2) 常数通常不在一个地方使用。考虑一下用1024个元素定义一个缓冲区的情况,然后,在代码中的其他地方,你想要循环所有元素(假设代码< sieOfs不可用,例如在某个地方,它被转换成指针)。您将编写类似于(i=0;iIMHO)的
for的代码。最佳做法是将包含常量的数据从代码中分离出来。如果在配置文件中包含常量,则可以很好地分隔这些数据。然后,您可以使用libconfig之类的库来读取配置文件一次,并在代码中设置值。类似以下内容:

const int bufferSize = cfg.getBufferSize();
char buffer[bufferSize];
const int BUFF_SIZE = 1024;

char buffer[BUFF_SIZE];

cfg是处理读取配置文件的类的对象。

老实说,两者都不是最佳做法。在
C++
中,建议您使用如下
const
变量:

const int bufferSize = cfg.getBufferSize();
char buffer[bufferSize];
const int BUFF_SIZE = 1024;

char buffer[BUFF_SIZE];

通过这种方式,您可以将它们隐藏在名称空间中或放在类中。

如果有文件证明您将存储的文本永远不会超过设定的数量,那么在编译时如何定义缓冲区只是一个品味问题

但是,如果缓冲区包含可以在运行时通知您文本大小的文本,那么不要使用常量——使用运行时返回给您的信息来适当调整缓冲区的大小

例如,许多处理文件、套接字等的I/O函数提供有关读取字符数的信息。另一个例子是,许多用于各种技术的API函数在两种模式下工作,其中第一种模式允许您查询存储信息所需的字符数,第二种模式是实际读取获取角色


C++的“最佳”方式是使用<代码> STD::vector < /COD> >调用<代码>在适当的时候,这不仅使程序安全,而且灵活。我个人不得不调试从API函数返回的信息超过硬编码缓冲区的界限,从而引起悲伤。使用<代码> STD::向量< /代码>减轻了这个问题。< /P>我们使用C还是C++?T的答案他的问题是依赖于本地编码标准,以及C或C++是使用的语言。GNU指南说,最好是使用动态分配,这样就不会限制用户到任意限制。@ IKiWixz——但是有些制度不订阅,当使用C++时,问题是最重要的。它是否有效?在执行时知道大小。,如何进行分配。我认为这里必须有新的分配。