如何使用 C 中的预处理器指令配置类型?

How to make types configurable with preprocessor directives in C?

截至目前,我的库的头文件中有类似以下代码的内容(为清楚起见更改了名称):

#ifndef CFG_RESULT_TYPE
#define CFG_RESULT_TYPE double
#endif

#if CFG_RESULT_TYPE == float
#define result_parser strtof
#elif CFG_RESULT_TYPE == double
#define result_parser strtod
#elif CFG_RESULT_TYPE == long double
#define result_parser strtold
#else
#error "Invalid result type"
#endif

typedef RESULT_TYPE result_t

我认为这会起作用,它似乎适用于 floatdouble(话又说回来,这可能实际上是未定义的行为),但不适用于 long double。实现这个的正确方法是什么?

我还应该补充一点,_Generic 是不可能的;我坚持这个项目的 C99 标准。

#define DOUBLE 1
#define FLOAT 2
#define LONG_DOUBLE 3

#ifndef CFG_RESULT_TYPE
#define CFG_RESULT_TYPE DOUBLE
#endif

#if CFG_RESULT_TYPE == FLOAT
    #define result_parser strtof
    #define RESULT_TYPE float
#elif CFG_RESULT_TYPE == DOUBLE
    #define result_parser strtod
    #define RESULT_TYPE double
#elif CFG_RESULT_TYPE == LONG_DOUBLE
    #define result_parser   strtold
    #define RESULT_TYPE long double
#else
 #error "Invalid result type"
#endif

#ifdef RESULT_TYPE
typedef RESULT_TYPE result_t;
#endif