避免宏将声明与实现分开

时间:2017-06-20 16:39:05

标签: c

为数据缓冲区编写一些代码我认为,最好通过以下方式在头文件中提供缓冲区的最大大小:

#define MAXIMUM_BUFFER_SIZE (SIZE_MAX - 1)

然而,我在此看到的最大缺点(除了使预处理器混乱之外)是最大大小实际上是特定于实现的并且可能会改变。如果其他代码依赖于旧标头但新实现或其他方式,它可能会中断。因此,我通过声明一个函数

来考虑一种更抽象的方式
size_t maximumBufferSize();

在标题中并在相应的实现文件中提供实现。我不太关心运行时,特别是因为值仍然是常量,只需要计算一次,然后可以在其他代码文件中存储在其他代码文件中,如果需要的话。

所以我的实际问题是:这两种方法都有其他优缺点,我必须考虑吗?是否有第三种方法可以达到相同的效果,甚至可能更好?

2 个答案:

答案 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)