c - 如何创建配置对象

问题描述 投票:2回答:2

我想创建一个可以在我的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实例吗?

谢谢

c config
2个回答
5
投票

您在头文件中声明了一个全局对象:

extern config_t global_config;

然后在一些合适的.c文件中定义它:

config_t global_config;

如果您要在头文件中定义配置变量,链接器会抱怨存在多个global_config实例,因为每次导入都会创建一个新实例(假设您的项目有多个.c文件)。


3
投票

创建一个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);
© www.soinside.com 2019 - 2024. All rights reserved.