|
|
  |
Поиск по массиву в compile time на С |
|
|
|
Aug 14 2018, 07:10
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Цитата(Nixon @ Aug 14 2018, 09:39)  В стандарте то стандарте, но не совсем "С", точнее совсем не "С". C++11 это. Ну с связи с возможностью удобной интеграции GCC в MS VS посредством VisualGDB я пересел полностью на GCC, для которого и С ++ 11 совсем не новинка. Если поджимают ресурсы - не пользую stl, new и подобное просто, а сами по себе плюсы ничего не кушают, даже виртуальные методы - точно также делались в голом С, посредством таблиц и передачей в функции явного this, так что ничего не теряю с плюсами это точно Цитата(Kabdim @ Aug 14 2018, 09:49)  Почему они так написали - понятно, пишут так что бы их поняли без буквоедства, но кмк тут они переборщили с обобщением. В стандарте следующее:
Как я это понимаю - если оно врет одинаково для всех энумов с одним типом - это ок. И оно может, т.к. гарантий что энум будет размещен именно в том типе что указан, нет, только то что значения энума помещаются в данный тип. это как раз в Сях, без спецификации underlying типа. А Никсон как раз описал возможность в С11 явно указать этот тип, причем в такой форме это не возможность, а обязанность. PS  я таки с вашими новыми знаниями добил майкрософтовский компилер!!
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 17 2018, 10:54
|

Местный
  
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264

|
Цитата(Kabdim @ Aug 17 2018, 14:39)  Как это значение может быть в структуре? Это просто число, оно нигде, пока вы его куда-то не положите. А если положили то и sizeof нужно применять к месту куда положили. А где Вы видите значение в структуре? Перечисление - это такой же тип, как, например, структура. Только поля перечислений могут использоваться без имени самого перечисления. Например, Код typedef enum { OK = 0, ERR }TEnum; дает возможность объявлять переменные перечислимого типа: Код TEnum my_var; // my_var - это теперь int или char в зависимости от реализации компилятора
|
|
|
|
|
Aug 17 2018, 12:45
|
Знающий
   
Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842

|
Применительно к этой ситуации, как раз Кейл - неправильно делает, но полезным для эмбедеда способом. Цитата(DASM @ Aug 17 2018, 15:04)  Почему компилятор, выделяя место для поля типа энум - отводит на это 1 байт, но sizeof применительно к элементу этого энум дает 4. Если это вопрос, то потому что sizeof принимает либо тип, либо выражение. Т.к. это выражение, то число-значение энума, автоматом в выражении приводится к int. И sizeof соответственно отдает размер инта.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|