Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: Вопросы по С/С++ (СИ)

Пт ноя 09, 2018 15:55:59

не "пишется", а вызывает ошибку в процессе компиляции. В вашей терминологии "не помещается" ;) Как вы, возможно, можете наблюдать, после явного указания типа инициализируемой переменной ошибка более не появляется. Возможно, мои объяснения - ерунда. Предложите, пожалуйста, правильное объяснение. Если для вас это по какой-то причине невозможно - просто помолчите в сторонке, пока кто-нибудь умный не объяснит.

Добавлено after 13 minutes 9 seconds:
я понял, в чём дело ;) всё действительно намного проще, чем я думал: нам нужно инициализировать структуру All_ChannelData_t, массив на 8 экземпляров ChannelData_t, и сами структуры ChannelData_t. "Просто добавь фигурные скобки" :)
Код:
   All_ChannelData_t All_ChannelData = { // All_ChannelData_t structure
      { // ChannelData[8] array
         { // ChannelData_t structure
         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,
         },
      }
   };
собственно, оно и ругалось на "too many initializers" - массив же один ;)

Re: Вопросы по С/С++ (СИ)

Пт ноя 09, 2018 19:24:08

AAX писал(а):Возможно, мои объяснения - ерунда.
как вы сами доказали - таки да, ерунда

Re: Вопросы по С/С++ (СИ)

Сб ноя 17, 2018 15:26:39

Никто не знает почему
auto n=end(silo)-begin(silo);
Code blocks выдает int вместо ptrdiff_t.
Это от компилятора зависит?

Re: Вопросы по С/С++ (СИ)

Сб ноя 17, 2018 16:03:15

Что такое end, begin и silo нам предлагается угадать?

PS: auto удаляет ссылки, квалификаторы const и квалификаторы volatile. Не в этом дело?

Догадаемся, что речь идёт о std::end и std::begin

Определение в IAR


Определение в GCC по сути то же самое


Посмотрим что такое ptrdiff_t

В IAR

В GCC


Псевдоним на базовый тип. Думаю, компилятор вполне закономерно взял базовый тип.
Последний раз редактировалось VladislavS Сб ноя 17, 2018 17:08:13, всего редактировалось 1 раз.

Re: Вопросы по С/С++ (СИ)

Сб ноя 17, 2018 17:01:14

VladislavS писал(а):Догадаемся, что речь идёт о std::end и std::begin

Ну да.

Да черт с этими определениями.
Почему компилятор определяет неявно тип int вместо ptrdiff_t?

#include <cstddef>
#include <iterator>
using namespace std;

int main(int argc, char** argv) {
char silo[10];
auto n=end(silo)-begin(silo);
return 0;
}
тут n почему-то int

Re: Вопросы по С/С++ (СИ)

Сб ноя 17, 2018 17:06:05

тут n почему-то int

Перед выполнением математических операций все приводится к одному типу и для целых это будет int, если его достаточно, т.е. даже 'A' + 1 дает int.
А, тут итераторы, тогда все зависит от перегрузки операторов, тем более в принципе ptrdiff_t как int и объявлен... Компилятор какой?
Последний раз редактировалось Reflector Сб ноя 17, 2018 17:14:38, всего редактировалось 1 раз.

Re: Вопросы по С/С++ (СИ)

Сб ноя 17, 2018 17:11:17

Перед выполнением математических операций все приводится к одному типу и для целых это будет int, если его достаточно, т.е. даже 'A' + 1 дает int.

да, но тут вычитаются же указатели.
Компилятор игнорит стандарт чтоли?

Re: Вопросы по С/С++ (СИ)

Сб ноя 17, 2018 17:15:56

Тип то тут одинаковый. Но вступает в силу "арифметика указателей". Результат разности двух указателей это по классике будет int. Будет ли компилятор подбирать для него псевдоним ptrdiff_t ? Я бы не стал :)

Re: Вопросы по С/С++ (СИ)

Сб ноя 17, 2018 17:40:17

VladislavS писал(а):Результат разности двух указателей это по классике будет int

Это же по классике.
VladislavS писал(а):Будет ли компилятор подбирать для него псевдоним ptrdiff_t ?

Ну как бы в плюсах должен. Он же видит, что вычитаются указатели.

Re: Вопросы по С/С++ (СИ)

Сб ноя 17, 2018 18:05:04

Ну как бы в плюсах должен. Он же видит, что вычитаются указатели.

Вот как объявлен ptrdiff_t:
Код:
typedef int   ptrdiff_t;

Ptrdiff_t - это новый тип? Нет, это псевдоним для существующего типа, новый тип тут не создается, потому вполне логично, что auto выводит тип разности указателей как int. Тем более ptrdiff_t появился относительно недавно, а указатели были давно и как-то без него обходились, так что никакие стандарты тут не игнорятся.

Re: Вопросы по С/С++ (СИ)

Чт ноя 29, 2018 00:11:50

Я правильно понимаю?:

Код:
A& Func()const{return *this;}

Можно передать константу и неконстанту. И функция может стоять слева от операторов.

Код:
const A&(){return *this;}


Можно передать только неконстанту. Слева стоять не может.

Код:
const A&()const{return *this;}


Можно передать константу и неконстанту. Слева стоять не может.

Re: Вопросы по С/С++ (СИ)

Чт ноя 29, 2018 00:19:57

Ничего не понятно, но.

const после метода означает, что метод не изменяет внутренние данные класса.
Код:
Func() const;

const слева от возвращаемого значения - запрет изменять данные по возвращаемой ссылке/указателю.
Код:
const A& Func();

const в аргументе - функция(метод) не имеет права менять данные по передаваемой ей ссылке/указателю.
Код:
Func(const A&);

Re: Вопросы по С/С++ (СИ)

Пн дек 03, 2018 08:39:12

Добрый день, делаю bootloader, по включению питания сравнивается CRC приложения с текущим CRC, если совпадает, значит приложение зашито и переходим в него если нет то переходим в bootloader.
Так вот теперь столкнулся с проблемой как обратно вернуть в bootloader, по программному условию? После того как делаю программный reset, он у меня
опять в приложение уходит, а передать из приложение в bootloader переменные можно только через Flash, но такой вариант, не очень нравиться. Долго, надо оперативнее перейти.

Re: Вопросы по С/С++ (СИ)

Пн дек 03, 2018 12:56:38

а передать из приложение в bootloader переменные можно только через Flash, но такой вариант, не очень нравиться.
В вашем секретном процессоре нет ОЗУ, регистров процессора и перифериии куда можно положить переменные?

Re: Вопросы по С/С++ (СИ)

Пт дек 14, 2018 06:31:00

Народ почему то Code Blocks 17 ругается:
Код:
         const char d[]="fsd";
        string s="dfsdfsfs";
        strcpy(s,d);


Почему то не хочет конвертить string в char*. Хотя я видел код смешивающий стринги с массивами без c_str. Может где настройки есть какие?

Re: Вопросы по С/С++ (СИ)

Пт дек 14, 2018 07:44:09

strcpy первым аргументом указатель на char принимает, а Вы туда не пойми что передали (С++, экземпляр класса std_string ? зачем так делать?)

Re: Вопросы по С/С++ (СИ)

Пт дек 14, 2018 08:12:53

strcpy первым аргументом указатель на char принимает, а Вы туда не пойми что передали.

Тоже показалось странным.Собственно

Нашел:
Код:
        char d[]="fsdhfghf";
        string s="dfs12";
        strcpy(d,&s[0]);

Re: Вопросы по С/С++ (СИ)

Пт дек 14, 2018 08:17:51

Народ почему то Code Blocks 17 ругается:
Код:
         const char d[]="fsd";
        string s="dfsdfsfs";
        strcpy(s,d);


Почему то не хочет конвертить string в char*. Хотя я видел код смешивающий стринги с массивами без c_str. Может где настройки есть какие?

А чем Вам не понравился стандартный способ присваивания ?
Код:
s=d;

Re: Вопросы по С/С++ (СИ)

Пт дек 14, 2018 08:35:50

Аlex писал(а):А чем Вам не понравился стандартный способ присваивания ?

Все в перемешку. Вот и приходится использовать и то, и то.

Re: Вопросы по С/С++ (СИ)

Пт дек 14, 2018 09:16:29

Ну так Вы решились использовать string, значит и пользуйтесь только его функционалом. Зачем что-то изобретать ?
Ответить