我想创建一个可以在我的c程序中的任何地方使用的配置对象。
这样做的最佳做法是什么?
目前,我有一个如下所示的config.h:
#define OUTPUT 0
#define OUTPUT_DISPLAY 0
#define OUTPUT_WIDTH 1920
#define OUTPUT_HEIGHT 1080
typedef struct {
const char *output
const char *output_display;
int output_width;
int output_height;
} config_t;
我会在头文件中创建一个名为config的config_t实例吗?
谢谢
您在头文件中声明了一个全局对象:
extern config_t global_config;
然后在一些合适的.c文件中定义它:
config_t global_config;
如果您要在头文件中定义配置变量,链接器会抱怨存在多个global_config
实例,因为每次导入都会创建一个新实例(假设您的项目有多个.c文件)。
创建一个config.c
文件,您将使用以下内容添加到编译中:
#include <config.h> // or "config.h"
config_t config_instance = {
.output = "default output",
.output_display = "default display",
};
并在config.h文件中extern变量:
extern config_t config_instance;
或更好。让我们创建一个允许访问您的配置的功能,以便我们可以跟踪和验证对它的更改。像这样创建config.c
:
#include <config.h> // or "config.h"
static config_t config_instance = {
.output = "default output",
.output_display = "default display",
};
const config_t *config_get(void) {
return &config_instance;
}
int config_set(const config_t *newconfig) {
if (/* check if newconfig is valid etc. */) {
return -1; // return error number
}
config_instance = *newconfig;
return 0; // success in changing config
}
并通过添加config.h
文件导出函数:
const config_t *config_get(void);
int config_set(const config_t *newconfig);