我有一个定义以下枚举的声音库:
libsnd.h
:
enum sample_format {
signed_16bit_little_endian,
signed_16bit_big_endian,
//etc
};
我正在设计一个应具有示例格式可配置的应用程序。精确地
application.h
:
#include <libsnd.h> //<--- libsnd Here
typedef struct app_config_t app_config_t
app_config_t *cfgalloc();
void set_sample_format(app_config_t *cfg_ptr, enum sample_format sf);
main.c
#include <libsnd.h> //<--- libsnd Here
#include "application.h"
int main(int agrc, char *argv[]){
enum sample_format sf = //parse arguments and extract sample format
app_config_t *cfg_ptr = cfgalloc();
set_sample_format(cfg_ptr, sf); //<--- libsnd Here
}
使用这种方法,我目前看到以下问题:
它与libsnd.h
紧密耦合,因此切换到另一个库很痛苦。
如果未将libsnd
实施到某些特定平台,我想将我的应用程序移植到该平台,则需要自己实施它或在整个应用程序中使用大量类似#ifdef
的宏
我看到的问题的解决方案是在
中定义自己的枚举 application.h
:
enum app_sample_format {
signed_16bit_little_endian,
signed_16bit_big_endian,
//etc
};
这会将可移植性问题留给application.c
文件。但这是我想避免的样板。解决此问题的常用方法是什么?