Должен ли enum никогда не использоваться в API?

Я использую библиотеку C, предоставленную мне уже скомпилированной. У меня есть ограниченная информация о компиляторе, версии, опциях и т. Д., Используемых при компиляции библиотеки. Интерфейс библиотеки используетenum как в передаваемых структурах, так и непосредственно в качестве передаваемых параметров.

Вопрос заключается в следующем: как я могу заверить или установить, что при компиляции кода для использования предоставленной библиотеки мой компилятор будет использовать тот же размер для техenums? Если это не так, структуры выигралиt, и передача параметров может быть испорчена, например,long противint

Мое беспокойство связано со стандартом C99, в котором говорится, чтоenum тип:

должен быть совместим с типом char, целочисленным типом со знаком или целочисленным типом без знака. Выбор типа определяется реализацией, но должен быть способен представлять значения всех членов перечисления.

Насколько я могу судить, до тех пор, пока подходит наибольшее значение, компилятор может выбирать любой тип, который ему чертовски нравится, эффективно по своему прихоти, потенциально варьируя не только между компиляторами, но и разными версиями одного и того же компилятора и / или параметров компилятора. , Он может выбрать 1, 2, 4 или 8-байтовые представления, что приведет к потенциальной несовместимости как структур, так и передачи параметров. (Это может также выбрать подписанный или неподписанный, но я нев этом контексте не вижу механизма, чтобы это было проблемой.)

Я что-то здесь упускаю? Если я что-то не пропустил, значит ли это, чтоenum никогда не должен использоваться в API?

Обновить:

Да, я что-то упустил. В то время как спецификация языка неЭто помогает, как отмечает @Barmar, двоичный интерфейс приложения (ABI). Или, если это не такт, то ABI является недостаточным.ABI для моей системы действительно указывает, чтоenum должно быть четырехбайтовым целым числом со знаком. Если компилятор не подчиняется этому, то это ошибка. Учитывая полный ABI и совместимые компиляторы,enum Можно безопасно использоваться в API.

Ответы на вопрос(2)

Ваш ответ на вопрос