AlexRayne 7 28 сентября, 2021 Опубликовано 28 сентября, 2021 · Жалоба 4 часа назад, Сергей Борщ сказал: Однако, в таком случае выдается предупреждение об использовании функции без прототипа, которого достаточно для выявления подобных недоработок кода, так что смысла дополнительно включать еще и это предупреждение (а оно может быть включено только принудительно) не видно. пасиба Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 28 сентября, 2021 Опубликовано 28 сентября, 2021 · Жалоба 7 часов назад, dxp сказал: А "целое в перечисление" - небезопасное, т.к. в перечислении просто может не оказаться соответствующего значения. Даже не просто какого-то конкретного значения, а и сам размер его может быть недостаточным. Потому как некоторые компиляторы умеют оптимизировать хранение enum, записывая его в 1 байт. Подозреваю, что делают они это, основываясь на максимальном значении внутри перечисления. Но не проверял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 28 сентября, 2021 Опубликовано 28 сентября, 2021 · Жалоба 1 minute ago, jcxz said: Даже не просто какого-то конкретного значения, а и сам размер его может быть недостаточным. Потому как некоторые компиляторы умеют оптимизировать хранение enum, записывая его в 1 байт. Подозреваю, что делают они это, основываясь на максимальном значении внутри перечисления. Но не проверял. GCC так не делает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 28 сентября, 2021 Опубликовано 28 сентября, 2021 · Жалоба 22 минуты назад, jcxz сказал: Потому как некоторые компиляторы умеют оптимизировать хранение enum, записывая его в 1 байт. Да, Keil uVision на ARM Compiler 6, по крайней мере, так делает. Помню, как у себя в структурах протокола обмена заложил enum, полагая, что там будет 4-байтовый int. А позже выяснилось, что этот элемент занимает 1 байт Пришлось править на int и в нужных местах кастовать явно. Но да, у автора топика GCC, там я не знаю, что да как. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 28 сентября, 2021 Опубликовано 28 сентября, 2021 · Жалоба 1 час назад, one_eight_seven сказал: GCC так не делает Делает-делает, c -fshort-enums. 1 час назад, jcxz сказал: Даже не просто какого-то конкретного значения, а и сам размер его может быть недостаточным К счастью, компилятор знает размер enum в точке использования и вполне может определить - влезет в него соответствующий вид целого или нет. Но он этим не занимается, как не занимается подобным и при присваивании char = int, int = long int и тому подобных. В сях (но не в плюсах) просто разрешены неявные преобразования int к enum и все. Как версия: обсуждаемое предупреждение выдается потому, что если программист делает явное приведение там, где оно и так будет выполнено неявно - то он погроммист и плохо представляет, что он делает . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться