Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Поиск по массиву в compile time на С
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Страницы: 1, 2
Forger
После sizeof ( некого enum ), недалеко и до sizeof ( #define чего-то ) ... sm.gif
DASM
Цитата(Forger @ Aug 16 2018, 17:56) *
После sizeof ( некого enum ), недалеко и до sizeof ( #define чего-то ) ... sm.gif

А все же, почему так?
Forger
Цитата(DASM @ Aug 16 2018, 18:09) *
А все же, почему так?

Да кто его ж знает, компилятор этот ...

Вот тут немножко есть про это: https://stackoverflow.com/questions/8115550...-type-data-in-c
sigmaN
Извиняюсь, если это уже предлагали(не читал все сообщения)
https://www.boost.org/doc/libs/1_67_0/libs/.../doc/index.html

The library supports both C++ and C compilation. It does not depend on any other Boost libraries and therefore may be used as a standalone library.
Kabdim
Цитата(DASM @ Aug 16 2018, 17:41) *
Просто понять почему он в структуре один, а вот так просто -4

Как это значение может быть в структуре? Это просто число, оно нигде, пока вы его куда-то не положите. А если положили то и sizeof нужно применять к месту куда положили.
Arlleex
Цитата(Kabdim @ Aug 17 2018, 14:39) *
Как это значение может быть в структуре? Это просто число, оно нигде, пока вы его куда-то не положите. А если положили то и sizeof нужно применять к месту куда положили.

А где Вы видите значение в структуре? Перечисление - это такой же тип, как, например, структура. Только поля перечислений могут использоваться без имени самого перечисления.
Например,
Код
typedef enum
{
    OK = 0,
    ERR
}TEnum;

дает возможность объявлять переменные перечислимого типа:
Код
TEnum my_var; // my_var - это теперь int или char в зависимости от реализации компилятора
Kabdim
Я не вижу. Вопрос был DASM'у цитата к которой вопрос в моем посте до вопроса. Посмотрите внимательно на код DASM, с которого началось обсуждение.
DASM
Цитата(Kabdim @ Aug 17 2018, 13:39) *
Как это значение может быть в структуре? Это просто число, оно нигде, пока вы его куда-то не положите. А если положили то и sizeof нужно применять к месту куда положили.

offsetof считает смещения поля в структуре. Видно, что оно увеличивается на один после такого энум поля.
Что вам непонятно? Почему компилятор, выделяя место для поля типа энум - отводит на это 1 байт, но sizeof применительно к элементу этого энум дает 4.
Forger
Цитата(DASM @ Aug 17 2018, 15:04) *
offsetof считает смещения поля в структуре. Видно, что оно увеличивается на один после такого энум поля.
Что вам непонятно? Почему компилятор, выделяя место для поля типа энум - отводит на это 1 байт, но sizeof применительно к элементу этого энум дает 4.

Вставил как есть ваш код в компилятор ARM (keil), в двух версиях: v5.06 и v6.10.1, вышло sizeof(tst) = 1 ... Все норм.
По-ходу ваш компилятор такой ... странный cranky.gif
Kabdim
Применительно к этой ситуации, как раз Кейл - неправильно делает, но полезным для эмбедеда способом.
Цитата(DASM @ Aug 17 2018, 15:04) *
Почему компилятор, выделяя место для поля типа энум - отводит на это 1 байт, но sizeof применительно к элементу этого энум дает 4.

Если это вопрос, то потому что sizeof принимает либо тип, либо выражение. Т.к. это выражение, то число-значение энума, автоматом в выражении приводится к int. И sizeof соответственно отдает размер инта.
sigmaN
From Standard C++ 7.2/5:
Цитата
The underlying type of an enumeration is an integral type that can represent all the enumerator values defined in the enumeration. It is implementation-defined which integral type is used as the underlying type for an enumeration except that the underlying type shall not be larger than int unless the value of an enu- merator cannot fit in an int or unsigned int. If the enumerator-list is empty, the underlying type is as if the enumeration had a single enumerator with value 0. The value of sizeof() applied to an enu- meration type, an object of enumeration type, or an enumerator, is the value of sizeof() applied to the underlying type.
DASM
Да ладно, фиг с ним.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.