Вопросы по С/С++ (СИ)
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
а разве время не в unsigned long хранится? просто принудительно привести к целочисленному типу, вычислить разность, а результат потом разбить на секунды-минуты... не?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
Доброе утро! Бьюсь на одной проблемой второй день.
Пишу на СИ в IAR.
Есть у меня некая структура:
Затем я создал еще одну, в которую была включена предыдущая структура:
Как мне теперь присвоить значения всем четырем элементам каждой из восьми структур?
Пробовал кучу вариантов, в том числе и такой в СИшном файле (который, как мне кажется, должен был работать):
но вываливается ошибка о том, что указано слишком много значений.
Пишу на СИ в IAR.
Есть у меня некая структура:
Код: Выделить всё
typedef struct
{
int32_t power;
int32_t energy;
uint32_t voltage;
uint32_t current;
} ChannelData_t;
Код: Выделить всё
typedef struct
{
ChannelData_t ChannelData[8];
} All_ChannelData_t;
Пробовал кучу вариантов, в том числе и такой в СИшном файле (который, как мне кажется, должен был работать):
Код: Выделить всё
All_ChannelData_t All_ChannelData = {
{
1000,
1000,
1000,
1000,
},
{
1000,
1000,
1000,
1000,
},
{
1000,
1000,
1000,
1000,
},
{
1000,
1000,
1000,
1000,
},
{
1000,
1000,
1000,
1000,
},
{
1000,
1000,
1000,
1000,
},
{
1000,
1000,
1000,
1000,
},
{
1000,
1000,
1000,
1000,
},
};
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
запятая последняя в каждой структуре и последняя в массиве - не лишняя ли?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
Если их убрать (в любой комбинации), то ничего не меняется, хотя по логике, лишняя только одна в конце массива.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
Должно быть 32 целых числа и между ними 31 запятая. Считай.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
кстати, зачем еще одна структура, если в ней только одно поле - массив? чем массив плох?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Если речь о GCC, можно так:
Код: Выделить всё
All_ChannelData_t All_ChannelData = { .ChannelData[0 ... 7] = { 1000, 1000, 1000, 1000 }};ARV писал(а):запятая последняя в каждой структуре и последняя в массиве - не лишняя ли?
От этих якобы лишних запятых хуже не будет. Я предпочитаю ставить запятую и для последнего поля в структуре - потом, при добавлении новых полей, и дифф выглядит "чище" и копипастить проще.VladislavS писал(а):Должно быть 32 целых числа и между ними 31 запятая. Считай.
Re: Вопросы по С/С++ (СИ)
[uquote="VladislavS",url="/forum/viewtopic.php?p=3501367#p3501367"]Должно быть 32 целых числа и между ними 31 запятая.[/uquote]
То есть, дополнительные разделительные фигурные скобки не нужны?
То есть, дополнительные разделительные фигурные скобки не нужны?
В будущем, возможно расширение второй структуры.ARV писал(а):кстати, зачем еще одна структура, если в ней только одно поле - массив? чем массив плох?
Это получается будет восемь строк (в каждой по одной структуре)?WiseLord писал(а):All_ChannelData_t All_ChannelData = { .ChannelData[0 ... 7] = { 1000, 1000, 1000, 1000 }};
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
нет, это одна строка для всех восьми структур, но это расширение синтаксиса Си только для компилятора GCCisx писал(а):Это получается будет восемь строк (в каждой по одной структуре)?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
[uquote="isx",url="/forum/viewtopic.php?p=3501356#p3501356"]Пробовал кучу вариантов, в том числе и такой в СИшном файле (который, как мне кажется, должен был работать):[/uquote]
Код: Выделить всё
All_ChannelData_t All_ChannelData = {
(ChannelData_t){
1000,
1000,
1000,
1000,
},
(ChannelData_t){
1000,
1000,
1000,
1000,
},
...
};- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Можно ещё и так, чуть длиннее, без GCC-шного расширения в виде оператора ...:
Код: Выделить всё
All_ChannelData_t All_ChannelData = {
.ChannelData[0] = {
1000, 1000, 1000, 1000,
},
.ChannelData[1] = {
1000, 1000, 1000, 1000,
},
.ChannelData[2] = {
1000, 1000, 1000, 1000,
},
.ChannelData[3] = {
1000, 1000, 1000, 1000,
},
.ChannelData[4] = {
1000, 1000, 1000, 1000,
},
.ChannelData[5] = {
1000, 1000, 1000, 1000,
},
.ChannelData[6] = {
1000, 1000, 1000, 1000,
},
.ChannelData[7] = {
1000, 1000, 1000, 1000,
},
};
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
все эти варианты не объясняют, почему у задавшего вопрос не проходит его вариант - он тоже корректный с виду
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
[uquote="ARV",url="/forum/viewtopic.php?p=3501507#p3501507"]все эти варианты не объясняют, почему у задавшего вопрос не проходит его вариант - он тоже корректный с виду[/uquote]все эти оба правильных варианта
инициализации вложенной структуры, как мне кажется, отлично объясняют, в чём проблема у задавшего вопрос: {1000,1000,1000,1000,} - с точки зрения компилятора это массив int[4], имеющий разительно отличаться от структуры из четырёх элементов int32_t. Мало того, даже если мы явно укажем элементам тип int32_t, что-то вроде {(int32_t)1000,(int32_t)1000,(int32_t)1000,(int32_t)1000,} всё равно будет разница в выравнивании элементов у массива и структуры.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
Код: Выделить всё
typedef struct
{
int32_t power;
int32_t energy;
uint32_t voltage;
uint32_t current;
} ChannelData_t;
typedef struct
{
ChannelData_t ChannelData[8];
} All_ChannelData_t;
All_ChannelData_t All_ChannelData = {
1001, 1002, 1003, 1004,
2001, 2002, 2003, 2004,
3001, 3002, 3003, 3004,
4001, 4002, 4003, 4004,
5001, 5002, 5003, 5004,
6001, 6002, 6003, 6004,
7001, 7002, 7003, 7004,
8001, 8002, 8003, 8004
};
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
ерунду глалолить изволите.AAX писал(а):отлично объясняют, в чём проблема у задавшего вопрос: {1000,1000,1000,1000,} - с точки зрения компилятора это массив int[4], имеющий разительно отличаться от структуры из четырёх элементов int32_t
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
Всех благодарю за помощь!
Прокатил вот такой вариант:
В принципе, это тоже, что предлагал WiseLord
Сейчас разбираюсь с выравниванием структуры. Как оказалось, этот момент тоже может добавить щепотку геморроя в работу с кодом.
Прокатил вот такой вариант:
Код: Выделить всё
All_ChannelData_t All_ChannelData= {
.ChannelData[0] = { 1000, 1000, 1000, 1000},
.ChannelData[1] = { 1000, 1000, 1000, 1000},
.ChannelData[2] = { 1000, 1000, 1000, 1000},
.ChannelData[3] = { 1000, 1000, 1000, 1000},
.ChannelData[4] = { 1000, 1000, 1000, 1000},
.ChannelData[5] = { 1000, 1000, 1000, 1000},
.ChannelData[6] = { 1000, 1000, 1000, 1000},
.ChannelData[7] = { 1000, 1000, 1000, 1000},
};
Сейчас разбираюсь с выравниванием структуры. Как оказалось, этот момент тоже может добавить щепотку геморроя в работу с кодом.
Re: Вопросы по С/С++ (СИ)
[uquote="ARV",url="/forum/viewtopic.php?p=3501526#p3501526"]ерунду глалолить изволите.[/uquote]извольте проглаголить истину, в таком раскладе. А то чот как-то... несерьёзно
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
при инициализации переменной константой не играет роль размер самой переменной - если константа "помещается" в переменную, то и Ок, а если не помещается, будет варнинг.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
Сначала правильно объясните компилятору, какую переменную вы инициализируете. Си предоставляет программисту 100500 способов выстрелить себе в ногу.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
запись, приведенная isx в его сообщении, вполне соответствует требованиям инициализации структур, и поэтому я сказал, что не понятно, почему у него не получается.
в любом случае ваши объяснения проблемы, что константа int пишется в переменную uint32_t, и, якобы, вызывает какие-то проблемы с выравниванием или размещением в памяти - это ерунда.
в любом случае ваши объяснения проблемы, что константа int пишется в переменную uint32_t, и, якобы, вызывает какие-то проблемы с выравниванием или размещением в памяти - это ерунда.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!