为数据缓冲区编写一些代码我认为,最好通过以下方式在头文件中提供缓冲区的最大大小:
#define MAXIMUM_BUFFER_SIZE (SIZE_MAX - 1)
然而,我在此看到的最大缺点(除了使预处理器混乱之外)是最大大小实际上是特定于实现的并且可能会改变。如果其他代码依赖于旧标头但新实现或其他方式,它可能会中断。因此,我通过声明一个函数
来考虑一种更抽象的方式size_t maximumBufferSize();
在标题中并在相应的实现文件中提供实现。我不太关心运行时,特别是因为值仍然是常量,只需要计算一次,然后可以在其他代码文件中存储在其他代码文件中,如果需要的话。
所以我的实际问题是:这两种方法都有其他优缺点,我必须考虑吗?是否有第三种方法可以达到相同的效果,甚至可能更好?
答案 0 :(得分:1)
第一种方式是走的路。任何以新实现方式破坏的方式依赖于该实现的内容写得不好,不应被视为" con"决定是否使用最佳方法。
只有在编译时不知道大小时才应使用第二个。
答案 1 :(得分:0)
如果您担心SIZE_MAX
根据您使用的平台或产品而发生变化,您可以随时执行以下操作:
#ifdef RASPBERRY_PI
#define SIZE_MAX 1024
#endif
#ifdef MY_WINDOWS_PC
#define SIZE_MAX 2048
#endif
#define MAXIMUM_BUFFER_SIZE (SIZE_MAX - 1)