C配置API

前端之家收集整理的这篇文章主要介绍了C配置API前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在设计用于配置库/实用程序的C API时,我有一个同事,他更喜欢将所有配置参数集中到一个函数调用中.例如:
int set_diagnostic_email_config( char *to_address,bool include_timestamp,bool send_for_crashes,bool send_daily_status,bool send_on_event1,bool send_on_event2 )

一个类似的“get”函数存在许多参数..这个方法的主要优点是如果有人添加了一个新选项,例如“bool send_on_event3”,那么因为原型改变了你被迫更新每个地方这个函数调用是使用(假设人们称之为多个地方).

我更喜欢以下内容

int get_diagnostic_email_config( struct email_config *p_config );
int set_diagnostic_email_config( struct email_config *p_config );

您只需根据需要更改结构元素.但是……如果有人更新了email_config“结构,它不会强迫人们更新所有使用它的地方(即使我们经常想……).而且我的同事抱怨说如果有人试图初始化手动“email_config”,然后如果事情后来添加,那么这些新字段将被取消初始化而没有警告.

关于哪种方法首选,是否有任何强烈的共识?或者还有另一种我想念的选择?

解决方法

结构比长列表更好.很长的清单很难维护,因为没有人记得确切的顺序.

您可以创建一个构造函数,使用安全(默认和/或无效)条目填充此结构.始终(可能在访问器功能中)检查无效值将使得在初始化中发现错误变得容易.

您可以在此结构中隐藏幻数.第一个字段是CONFIG_MAGIC,它需要等于您定义的常量.您在构造函数中设置此字段,并期望始终设置.这样你就可以避免某人只需要malloc()结构并手动将其初始化.这样的程序员需要了解这个CONFIG_MAGIC常量,并且很可能找到并使用正确的构造函数.

猜你在找的C&C++相关文章