Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
victorian1995
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 5
#1

Sizeof enum gdb

04.06.2018, 19:41. Просмотров 120. Ответов 5
Метки нет (Все метки)

Здравствуйте уважаемые форумчане!
Столкнулся со следующй ситуацией:
пишу embeded проект на си, компилится он gcc 7.2.0. Уж очень надо чтобы sizeof enum у меня был 4 байта, компилятор против, enum у меня
всегда получается в 1 байт. Выравнивание структур pragma pack 1 не прокатывает с перечислениями, а вариант с добавлением зачения max в enum большим чем dword может в себе уместить - работает, но выглядит по мне уж очень некрасиво. Помогите чем сможете, какую additional option нужно добавить.
IDE , которую использую - visual studio 13 с установленным visualgdb для embeded. Даташит у gcc уж очень сложно дается)
Заранее благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2018, 19:41
Ответы с готовыми решениями:

CodeLite ошибка failed to locate gdb! at 'gdb'
Установил на двух компьютерах CodeLite. На десятке и на семерке. Выдает окошко...

Что обозначает строка вида sizeof(data)/sizeof(data[0])?
#include "stdafx.h" #include <stdio.h> void bubble_sort(float *data, int...

Работа sizeof
Здравствуйте. Имеется код: #include <stdlib.h> #include <unistd.h>...

Sizeof структуры
Доброго времени суток, вопрос в общем таков: struct MyStruct { AnyType var;...

Память. sizeof
Простейшая прога, Почему результат sizeof = 4 ?? И как узнать размер текста в...

5
Evg
Эксперт CАвтор FAQ
19272 / 7130 / 527
Регистрация: 30.03.2009
Сообщений: 19,966
Записей в блоге: 30
04.06.2018, 20:44 #2
gcc-7.3 под linux'ом - sizeof от enum'а равен 4
gcc-4.8.3 под windows - аналогично

Так что ставь вопрос более предментно
0
victorian1995
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 5
04.06.2018, 23:52  [ТС] #3
Visualgdb это кроссплатформенный плагин для VS, позволяющий так же писать и прошивки к микроконтроллерам. Им в поддержку я уже написал, может они что скажут..А то что размер enum 4 байта это я понял, вопрос в том, можно ли дополнительными аргументами компиляции уменьшить/увеличить размер sizeof от перечисления. На пример в среде IAR(у них по ему вообще свой компилятор и отладчик) можно указать флаг компиляции "- enum_is_int", если не ошибаюсь.
0
Evg
Эксперт CАвтор FAQ
19272 / 7130 / 527
Регистрация: 30.03.2009
Сообщений: 19,966
Записей в блоге: 30
05.06.2018, 08:43 #4
Цитата Сообщение от victorian1995 Посмотреть сообщение
можно ли дополнительными аргументами компиляции уменьшить/увеличить размер sizeof от перечисления
С учётом

Цитата Сообщение от victorian1995 Посмотреть сообщение
вариант с добавлением зачения max в enum большим чем dword может в себе уместить - работает
скорее всего можно

Добавлено через 26 секунд
Но всё равно это выглядит бредово
0
victorian1995
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 5
05.06.2018, 10:54  [ТС] #5
В gcc компиляторе существуют флаги компилятора как -short-enums и -no-short-enums( -fshort-enums и -fno-short-enums). Первый предписывает gcc считать размером перечисления тот минимальный размер, который покроет максимальное его (перечисления) значение(но не меньше байта, конечно). Второй же флаг отменяет это и код компилится с размером enum как с кратным значению обычного регистра, как правило 4 байта.
Если я не прав, поправте меня, но выставив последний флаг в gcc, желаемого результата я добился, хоть компилятор и предупреждал ворнингами о возможных расхождениях.
Спасибо за ответы!
0
Evg
Эксперт CАвтор FAQ
19272 / 7130 / 527
Регистрация: 30.03.2009
Сообщений: 19,966
Записей в блоге: 30
05.06.2018, 12:58 #6
Цитата Сообщение от victorian1995 Посмотреть сообщение
но выставив последний флаг в gcc, желаемого результата я добился
Ну значит всё в порядке. Думается, что в "нормальных" конфигурациях по умолчанию используется режим -fno-short-enums. Всякие embedded компиляторы обычно являются "ненормальными". Вероятно, конкретно в твоём случае по умолчанию включен режим -fshort-enums

Цитата Сообщение от victorian1995 Посмотреть сообщение
хоть компилятор и предупреждал ворнингами о возможных расхождениях
Да, компилятор правильно предупреждает. Нужно понимать, что тебе ВСЮ программу целиком надо компилировать в НЕдефолтном режиме -fno-short-enums, включая все возможные библиотеки. В противном случае код может оказаться рассогласованным, т.к. в общем случае нельзя совместно линковать объектные файлы, собранные в режиме -fshort-enums и объектные файлы, собранные в режиме -fno-short-enums. "Нельзя" - это не физический запрет а возможность неправильной работы программы
1
05.06.2018, 12:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2018, 12:58

На sizeof жалуется
Вот кода: #include <iostream> /* run this program using the console pauser...

Sizeof() не работает в функции
Хочу выделить функцию, которая будет подсчитывать символы в массиве int main()...

Неверный вывод sizeof
#include "stdafx.h" #include <stdlib.h> #include <locale.h> /* ДЛЯ РАБОТЫ С...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru