Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.22.135] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Ребята, прошу тапками не кидаться. я новичек.
что означает эта операция . не понимаю results->rawbuf[i]*USECPERTICK, DEC и как мне результат этого вычисления присвоить переменной String raw полный код ниже: 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(""); } |
Сообщ.
#2
,
|
|
|
Это не операция, это два выражения:
results->rawbuf[i]*USECPERTICK DEC USECPERTICK и DEC, судя по виду, какие-то константы определённые посредством #define (что в свою очередь указывает на программу на чистом C, не C++) Имя первой расшифровывается скорее всего как "микросекунд на тик". Что означает вторая можно гадать. Значением второго выражения является значение соответствующей константы А первое вычисляется так: Указатель results содержит адрес некоей структуры decode_results. Эта структура имеет поле rawbuf (скорее всего указатель на область памяти, видимо как описанную как беззнаковые символы (байты), хотя может быть и массив) Из этой области по смещению i извлекается байт, и умножается на константу USECPERTICK. Как присвоить переменной? Просто пишешь var = results->rawbuf[i]*USECPERTICK; |
Сообщ.
#3
,
|
|
|
Цитата amk @ что в свою очередь указывает на программу на чистом C, не C++ А в чистом С можно в структурах объявлять методы? Или что тогда ткое: Цитата Emmys @ Serial.print ? Цитата Emmys @ results->rawbuf[i]*USECPERTICK Это операция умножения. А DEC - судя по всему передается вторым параметром в метод print. |
Сообщ.
#4
,
|
|
|
примерно понял. присвоить получилоось. меня DEC сбил с толку. спасибо вам большое
|
Сообщ.
#5
,
|
|
|
Цитата KILLER @ А в чистом С можно в структурах объявлять методы? Или что тогда ткое: Скорее всего плюсы... но вообще |
Сообщ.
#6
,
|
|
|
Цитата KILLER @ А в чистом С можно в структурах объявлять методы? В структуре можно объявить указатель на функцию - этого достаточно |
Сообщ.
#7
,
|
|
|
Цитата cppasm @ В структуре можно объявить указатель на функцию - этого достаточно Ну и что, и какой в этом смысл? Это будет указатель на функцию - а не метод. Судя по его коду у него print - перегружен, т.к. в одном случае он вызывает: Цитата Emmys @ Serial.print(results->rawbuf[i]*USECPERTICK, DEC); В другом случае: Цитата Emmys @ Serial.print (","); Т.е. на сколько можно судить - в первом случае в метод/функцию print передается два числовых значения, во втором случае строка. На сколько я знаю в чистом Си нет перегрузки функций. |
Сообщ.
#8
,
|
|
|
Цитата Emmys @ for (int i = 0; i < count; i++) { В Си нельзя объявлять переменные внутри for. |
Сообщ.
#9
,
|
|
|
Перегрузки в Си нету, значит плюсы.
Добавлено Цитата shm @ В Си нельзя объявлять переменные внутри for. В С99 можно... |
Сообщ.
#10
,
|
|
|
Цитата cppasm @ Перегрузки в Си нету Зато есть ... |
Сообщ.
#11
,
|
|
|
Цитата KILLER @ Да, это смесь C и C++. Думаю, структура decode_results унаследована из чистого C. Отсюда использование С-шных дефайнов. А в чистом С можно в структурах объявлять методы? |
Сообщ.
#12
,
|
|
|
Цитата KILLER @ Ну и что, и какой в этом смысл? Группировать несколько функций с одинаковыми сигнатурами, но разными реализациями. В общем Serial в данном случае выступает в роли явной таблицы методов. |
Сообщ.
#13
,
|
|
|
Цитата korvin @ Группировать несколько функций с одинаковыми сигнатурами, но разными реализациями. Так в Си нет перегрузки функций а в С++ это достигается путем перегрузки методов. Разве нет? Добавлено Цитата amk @ Да, это смесь C и C++. Тогда это С++. Добавлено Цитата korvin @ В общем Serial в данном случае выступает в роли явной таблицы методов. Если бы в Си была перегрузка функций - тогда бы я с тобой полностью согласлся, вышла бы эдакая эмуляция класса с методами, с одинаковой сигнатурой(хотя что мешало их просто перегрузить глобально), но в Си нет перегрузки функций и так вообще не будет компилится. |
Сообщ.
#14
,
|
|
|
это ардуино проект
|
Сообщ.
#15
,
|
|
|
Цитата KILLER @ Так в Си нет перегрузки функций а в С++ это достигается путем перегрузки методов. Разве нет? Перегрузка тут немного не при чём. И как раз из-за её отсутствия (а также отсутствия классов) часто используют такой «паттерн». Типа того: #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; } printf 1 2.300000 Hello! ;-) 1 =) 2.300000 B-] Bye! http://ideone.com/TFXinS Добавлено Что-то я не понял, форум как-то неадекватно воспринимает в коде. |