- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
enum test_result {
TEST_FAILED = -1,
TEST_SKIPPED,
TEST_OK
}
struct test_node {
const char *name;
const char *descr;
enum test_result (*measurement_test_handler)(void* params);
void *params;
enum test_result meas_result;
enum test_result init_result;
}
О духи говнакода наставьте агнца вашего на путь истинный. Написал сие я, запустил и всё пошло по п*изде, по причине невыравненых данных. #pragma pack не помог. Помогло лишь изменение типа enum test_result на uint8_t. Подскажите, дабы не наступать на подобные грабли болей, как кто себя проверяет при работе со структурами?
guest 02.10.2015 14:27 # +4
MiD 02.10.2015 14:33 # −3
{
.name = ,
.....
},
.name = ,
.....
{
}};
При обращении к полю элемента массива, выходит хуета.
Bobik 02.10.2015 14:53 # +2
guest 02.10.2015 16:26 # +5
Знаешь как со стороны это выглядит? "Пацаны, я тут бокрёнка кудрячил, а меня куздра будланула, как себя обезопасить?"
http://ideone.com/ или выходить будут только черепашки и хуета
http://ideone.com/zurpMq
Lokich 02.10.2015 15:35 # 0
тут например об этом сказано http://habrahabr.ru/post/142662/
MiD 02.10.2015 15:39 # +1
TEST_FAILED = -1,
TEST_SKIPPED,
TEST_OK
}
struct test_node {
const char *name;
const char *descr;
enum test_result (*measurement_test_handler)(void* params);
void *params;
enum test_result meas_result;
enum test_result init_result;
}
Это исправило ситуацию.
inkanus-gray 02.10.2015 16:45 # +2
Когда енум используется per se, до этого никому нет никакого дела, ведь всё работает же. А когда енум завёрнут в сложный тип (массив, структура), то все последующие данные могут съехать, если компилятор под него выделит другой базовый тип.
Надёжнее всего будет внутри структур и массивов использовать числовые типы данных с гарантированным размером (uint8_t, uint16_t, uint32_t etc).
roman-kashitsyn 02.10.2015 16:50 # +2
Нет. Компилятор определяет underlying тип для енума только на основе значений, которые может принимать enum.
inkanus-gray 02.10.2015 17:06 # 0
bormand 02.10.2015 17:38 # +3
MiD 02.10.2015 18:04 # 0
MiD 02.10.2015 18:05 # 0
MiD 02.10.2015 18:00 # 0
bormand 02.10.2015 18:06 # 0
MiD 02.10.2015 18:12 # 0
bormand 02.10.2015 18:21 # 0
Если gcc - глянь, нет ли случаем в параметрах компилятора какого-нибудь говна типа -fpack-struct.
MiD 02.10.2015 18:29 # 0
bormand 02.10.2015 18:36 # +1
Потом, если во внешнем файле получается 8, я попробовал бы скомпилить такую структуру в файле внутри проекта, но не подключая к нему хедеров. Если получится 5 - значит косяк в опциях (-fpack-struct?) или в насильно заинклуженных через опции файлах.
Если и так 8 - то начал бы цеплять хедеры, которые были в тех модулях. Делением пополам нашёл бы из какого именно вылез косяк...
Как-то так.
MiD 02.10.2015 18:40 # −1
MiD 02.10.2015 18:32 # 0
'-O2',
'-Werror',
'-Wall',
'-fmessage-length=0',
'-fsigned-char',
'-mthumb',
'-mcpu=cortex-m3',
'-ffunction-sections',
'-fdata-sections',
'-std=c11',
'-fno-common',
'-Wno-format',
'-g',
'-pipe',
'-Dprintf=iprintf',
'-Dsprintf=siprintf',
'-Dvsprintf=vsiprintf'
Antervis 05.10.2015 07:51 # 0