在C中的公共API函数中使用枚举参数是一个好主意吗?

vit*_*aut 7 c api enums api-design

我正在设计一个C API,除此之外还必须提供一种设置一些双值选项的方法.要识别选项,我使用以下枚举:

typedef enum
{
    OptionA,
    OptionB,
    ...
} Option;
Run Code Online (Sandbox Code Playgroud)

Option在公共API函数中用作参数类型是一个好主意:

int set_option(Option opt, double value);
Run Code Online (Sandbox Code Playgroud)

或者更好地使用int:

int set_option(int opt, double value);
Run Code Online (Sandbox Code Playgroud)

考虑到我将来可能需要添加更多选项?

还有现有API的任何一个很好的例子来证明这两种方法吗?

And*_*rsK 7

通过使用,enum您可以有效地帮助您的函数用户知道可用的有效值.当然缺点是,无论何时添加新选项,您都需要修改标题,因此用户可能需要重新编译其代码,而如果是,则int可能不必这样做.

  • 为什么要为重新编译添加新选项?旧代码仍然有效.如果您想要访问新功能,那么要求重新编译并不是没有道理的.如果你使用和int而不是你在头文件中将它定义为常量,那么也会在那里重新编译. (2认同)