Это хорошая идея использовать параметр enum в публичной функции API в C? - PullRequest
7 голосов
/ 03 февраля 2012

Я разрабатываю C API, который, помимо прочего, должен предоставлять возможность устанавливать некоторые значения с двумя значениями.Для определения параметров я использую следующее перечисление:

typedef enum
{
    OptionA,
    OptionB,
    ...
} Option;

Является ли хорошей идеей использовать Option в качестве типа параметра в общедоступной функции API:

int set_option(Option opt, double value);

илиЛучше использовать int вместо:

int set_option(int opt, double value);

, учитывая, что мне может понадобиться добавить дополнительные опции в будущем?

Также есть ли хорошие примеры существующих API, которые демонстрируют любой из этих подходов

Ответы [ 2 ]

7 голосов
/ 03 февраля 2012

Используя enum, вы эффективно помогаете пользователю вашей функции узнать, какие допустимые значения доступны.Конечно, недостатком является то, что всякий раз, когда добавляется новая опция, вам нужно будет изменить заголовок, и, таким образом, пользователю может понадобиться перекомпилировать свой код, тогда как если это int, ему, возможно, не придется это делать.

1 голос
/ 03 февраля 2012

Перечисления дают вам преимущество проверки времени компиляции, что значение является нормальным.Затем вам придется добавить новые параметры в новую версию файла заголовка, если вы добавите параметры в будущем.

...