На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> что означает эта операция
    Ребята, прошу тапками не кидаться. я новичек.
    что означает эта операция . не понимаю
    results->rawbuf[i]*USECPERTICK, DEC
    и как мне результат этого вычисления присвоить переменной
    String raw

    полный код ниже:
    ExpandedWrap disabled
      void dump(decode_results *results) {
        int count = results->rawlen;
       
      recivRAW="";
        for (int i = 0; i < count; i++) {
          if ((i % 2) == 1) {
            
        
            Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
            
            
            
               if (i < count-1) {Serial.print (",");}
          }
          else {
                
            Serial.print((int)results->rawbuf[i]*USECPERTICK, DEC);
             if (i < count-1) {Serial.print (",");}
          }
          Serial.print(" ");
        }
        Serial.println("");
       
       
        
      }
      Это не операция, это два выражения:
      ExpandedWrap disabled
        results->rawbuf[i]*USECPERTICK
      и
      ExpandedWrap disabled
        DEC

      USECPERTICK и DEC, судя по виду, какие-то константы определённые посредством #define (что в свою очередь указывает на программу на чистом C, не C++)
      Имя первой расшифровывается скорее всего как "микросекунд на тик". Что означает вторая можно гадать.

      Значением второго выражения является значение соответствующей константы

      А первое вычисляется так:
      Указатель results содержит адрес некоей структуры decode_results.
      Эта структура имеет поле rawbuf (скорее всего указатель на область памяти, видимо как описанную как беззнаковые символы (байты), хотя может быть и массив)
      Из этой области по смещению i извлекается байт, и умножается на константу USECPERTICK.

      Как присвоить переменной?
      Просто пишешь
      ExpandedWrap disabled
        var = results->rawbuf[i]*USECPERTICK;
        Цитата amk @
        что в свою очередь указывает на программу на чистом C, не C++

        А в чистом С можно в структурах объявлять методы?
        Или что тогда ткое:
        Цитата Emmys @
        Serial.print

        ?

        Цитата Emmys @
        results->rawbuf[i]*USECPERTICK

        Это операция умножения.

        А DEC - судя по всему передается вторым параметром в метод print.
        Сообщение отредактировано: KILLER -
          примерно понял. присвоить получилоось. меня DEC сбил с толку. спасибо вам большое
          Сообщение отредактировано: Emmys -
            Цитата KILLER @
            А в чистом С можно в структурах объявлять методы?
            Или что тогда ткое:

            Скорее всего плюсы... но вообще :D
              Цитата KILLER @
              А в чистом С можно в структурах объявлять методы?

              В структуре можно объявить указатель на функцию - этого достаточно ;)
                Цитата cppasm @
                В структуре можно объявить указатель на функцию - этого достаточно ;)

                Ну и что, и какой в этом смысл? Это будет указатель на функцию - а не метод. Судя по его коду у него print - перегружен, т.к. в одном случае он вызывает:
                Цитата Emmys @
                Serial.print(results->rawbuf[i]*USECPERTICK, DEC);

                В другом случае:
                Цитата Emmys @
                Serial.print (",");

                Т.е. на сколько можно судить - в первом случае в метод/функцию print передается два числовых значения, во втором случае строка.
                На сколько я знаю в чистом Си нет перегрузки функций.
                  Цитата Emmys @
                  for (int i = 0; i < count; i++) {

                  В Си нельзя объявлять переменные внутри for.
                  Сообщение отредактировано: shm -
                    Перегрузки в Си нету, значит плюсы.

                    Добавлено
                    Цитата shm @
                    В Си нельзя объявлять переменные внутри for.

                    В С99 можно...
                      Цитата cppasm @
                      Перегрузки в Си нету

                      Зато есть ...
                        Цитата KILLER @
                        А в чистом С можно в структурах объявлять методы?
                        Да, это смесь C и C++. Думаю, структура decode_results унаследована из чистого C. Отсюда использование С-шных дефайнов.
                          Цитата KILLER @
                          Ну и что, и какой в этом смысл?

                          Группировать несколько функций с одинаковыми сигнатурами, но разными реализациями. В общем Serial в данном случае выступает в роли явной таблицы методов.
                            Цитата korvin @
                            Группировать несколько функций с одинаковыми сигнатурами, но разными реализациями.

                            Так в Си нет перегрузки функций а в С++ это достигается путем перегрузки методов. Разве нет?

                            Добавлено
                            Цитата amk @
                            Да, это смесь C и C++.

                            Тогда это С++.

                            Добавлено
                            Цитата korvin @
                            В общем Serial в данном случае выступает в роли явной таблицы методов.

                            Если бы в Си была перегрузка функций - тогда бы я с тобой полностью согласлся, вышла бы эдакая эмуляция класса с методами, с одинаковой сигнатурой(хотя что мешало их просто перегрузить глобально), но в Си нет перегрузки функций и так вообще не будет компилится.
                            Сообщение отредактировано: KILLER -
                              это ардуино проект
                                Цитата KILLER @
                                Так в Си нет перегрузки функций а в С++ это достигается путем перегрузки методов. Разве нет?

                                Перегрузка тут немного не при чём. И как раз из-за её отсутствия (а также отсутствия классов) часто используют такой «паттерн». Типа того:

                                ExpandedWrap disabled
                                  #include <stdio.h>
                                   
                                  typedef struct Printer Printer;
                                   
                                  struct Printer
                                  {
                                      void (*print_string)(char*);
                                      void (*print_int)(int);
                                      void (*print_double)(double);
                                      void (*print_endline)(void);
                                  };
                                   
                                  /* предполагается, что эти функции реализованы в отдельном файле
                                     и не видны, поэтому могут иметь какие угодно имена,
                                     просто тут в Ideone нет поддержки нескольких файлов
                                     */
                                  void Printf_print_string (char  *s) { printf("%s", s); }
                                  void Printf_print_int    (int    i) { printf("%d", i); }
                                  void Printf_print_double (double d) { printf("%f", d); }
                                  void Printf_print_endline(void)     { printf("\n"); }
                                   
                                  const Printer Printf = {
                                      Printf_print_string,
                                      Printf_print_int,
                                      Printf_print_double,
                                      Printf_print_endline
                                  };
                                   
                                  void Happy_print_string (char  *s) { printf("%s ;-)", s); }
                                  void Happy_print_int    (int    i) { printf("%d =)",  i); }
                                  void Happy_print_double (double d) { printf("%f B-]", d); }
                                  void Happy_print_endline(void)     { printf("Bye! ^_^ \n"); }
                                   
                                  const Printer HappyPrinter = {
                                      Happy_print_string,
                                      Happy_print_int,
                                      Happy_print_double,
                                      Happy_print_endline
                                  };
                                   
                                  void print_all(Printer *p, char *s, int i, double d)
                                  {
                                      p->print_string(s);
                                      Printf.print_string("\n\t");
                                      p->print_int(i);
                                      Printf.print_string("\n\t");
                                      p->print_double(d);
                                      Printf.print_string("\n\t");
                                      p->print_endline();
                                      Printf.print_string("\n");
                                  }
                                   
                                  int main(void)
                                  {
                                      print_all(&Printf, "printf", 1, 2.3);
                                      print_all(&HappyPrinter, "Hello!", 1, 2.3);
                                      return 0;
                                  }


                                ExpandedWrap disabled
                                  printf
                                      1
                                      2.300000
                                      
                                   
                                  Hello! ;-)
                                      1 =)
                                      2.300000 B-]
                                      Bye! ^_^


                                http://ideone.com/TFXinS

                                Добавлено
                                Что-то я не понял, форум как-то неадекватно воспринимает ^_^ в коде.
                                Сообщение отредактировано: korvin -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0512 ]   [ 16 queries used ]   [ Generated: 4.05.24, 22:18 GMT ]