我正在编写一个共享/动态库(https://github.com/zsawyer/mumble-LinkAPI)。
为此,我将为共享内存结构中的数据提供一些基本的访问器(get、set 和 update)(不能更改,因为它是外部定义的)。我的图书馆将提供相当多的访问器。Getter 和 Setter 方法没问题,imo,但我的更新功能给我带来了麻烦。它们看起来几乎都一样——我闻到了很多代码冗余的味道。
注意:我要坚持C89!那就是:我不想用C++,也不想用C99、C11。
name
几乎所有其他更新功能的更新都是示例性的(参数会有所不同):
ErrorCode updateName(wchar_t name[MAX_NAME_LENGTH]) {
ErrorCode err = setName(name);
if (err != ERROR_CODE_NO_ERROR) {
return err;
}
return commit();
}
错误代码在枚举中定义:
/**
* error codes hinting at the root cause of a failure
*/
typedef enum {
/** no error */
ERROR_CODE_NO_ERROR = 0,
/** win32 specific: OpenFileMappingW failed to return a handle */
ERROR_CODE_WIN32_NO_HANDLE = 1,
/** win32 specific: MapViewOfFile failed to return a structure */
ERROR_CODE_WIN32_NO_STRUCTURE = 2,
/** unix specific: shm_open returned a negative integer */
ERROR_CODE_UNIX_NO_HANDLE = 3,
/** unix specific: mmap failed to return a structure */
ERROR_CODE_UNIX_NO_STRUCTURE = 4,
/** shared memory was not initialized */
ERROR_CODE_NO_MEMORY_WAS_INITIALIZED = 5
} ErrorCode;
我想将原始错误代码一直传递给库函数的调用者,同时避免使用不同的 setXxx 函数和参数编写相同的函数 x 次。我觉得应该有一个更简单的方法。
问题:如何重写更新函数以通过ErrorCode
并仍然减少代码冗余并使函数更具可读性/更短?
除此之外,我发现自己开始复制大部分函数文档注释(即 set 的注释与 update 方法的注释有 95% 相同),如果您也知道避免这种情况的最佳实践,请告诉我。