Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что означает данное выражение на C / 25 сообщений из 32, страница 1 из 2
03.06.2015, 10:33
    #38974954
Stanislav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
Добрый день!
подскажите пожалуйста что означает данное выражение на C ?

Код: plaintext
1.
2.
3.
4.
#define PARSE_BLOCK_SIZE(w, h) do { 
...
...
} while (0)
...
Рейтинг: 0 / 0
03.06.2015, 11:13
    #38975010
YesSql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
StanislavДобрый день!
подскажите пожалуйста что означает данное выражение на C ?

Код: plaintext
1.
2.
3.
4.
#define PARSE_BLOCK_SIZE(w, h) do { 
...
...
} while (0)


do { } while(0)
...
Рейтинг: 0 / 0
03.06.2015, 11:37
    #38975047
Stanislav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
YesSqlStanislavДобрый день!
подскажите пожалуйста что означает данное выражение на C ?

Код: plaintext
1.
2.
3.
4.
#define PARSE_BLOCK_SIZE(w, h) do { 
...
...
} while (0)


do { } while(0)

Понял, спасибо!
...
Рейтинг: 0 / 0
04.06.2015, 15:34
    #38976391
Stanislav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
А вот здесь, помогите пожалуйста, че-то не могу понять что делается?
Код: plaintext
1.
2.
3.
4.
5.
table = &vlc->table[table_index];
    for (i = 0; i < table_size; i++) {
        table[i][1] = 0; 
        table[i][0] = -1;
    }


я вижу 2 варианта:
1. Находим таблицу(table) с индексом (table_index), потом в цикле перебираем ее строки (table[i]) и присваиваем колонкам [1] и [0] значения.
2. получаем строку таблицы vcl.table c индексом (table_index) и потом начиная с этой строки перебираем остальные строки...

1-й вариант вроде бы как логичнее, но второй подходит по контексту остального когда.

Обращаю внимание что это С не С++

За ранее благодарен.
...
Рейтинг: 0 / 0
04.06.2015, 15:47
    #38976408
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
StanislavОбращаю внимание что это С не С++
Пофиг. Работа с трёхмерным массивом vlc->table от этого не зависит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.06.2015, 15:52
    #38976417
Stanislav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
Dimitry SibiryakovStanislavОбращаю внимание что это С не С++
Пофиг. Работа с трёхмерным массивом vlc->table от этого не зависит.

Все таки 3-мерный получается? т.е. п.1
...
Рейтинг: 0 / 0
04.06.2015, 16:08
    #38976438
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
StanislavВсе таки 3-мерный получается?
Эквивалентный код:
Код: sql
1.
2.
3.
4.
    for (i = 0; i < table_size; i++) {
         vlc->table[table_index][i][1] = 0;
         vlc->table[table_index][i][0] = -1;
     }


выглядит понятнее?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.06.2015, 16:15
    #38976445
Stanislav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
Dimitry Sibiryakov,
да я вот чего не могу понять

вот 1 часть кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  
...
VLC_TYPE (*table)[2];
  ....
 table = &vlc->table[table_index];

    for (i = 0; i < table_size; i++) {
        table[i][1] = 0; //bits
        table[i][0] = -1; //codes
    }


вот 2-я
Код: plaintext
1.
2.
3.
4.
5.
6.
static av_always_inline int webp_get_vlc(GetBitContext *gb, VLC_TYPE (*table)[2])
{
...
    code  = table[index][0];
    n     = table[index][1];
....



В 1-й используется как 3-мерный массив, а во 2-й как 2-мерный...
...
Рейтинг: 0 / 0
04.06.2015, 16:37
    #38976490
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
Stanislavда я вот чего не могу понять
Ты не можешь понять, что любой двумерный массив состоит из пачки одномерных, а трёхмерный,
соответственно, из пачки двумерных?.. Может, тебе воображение потренировать на кубике
Рубика?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.06.2015, 16:49
    #38976510
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
Dimitry SibiryakovStanislavВсе таки 3-мерный получается?
Эквивалентный код:
Код: sql
1.
2.
3.
4.
    for (i = 0; i < table_size; i++) {
         vlc->table[table_index][i][1] = 0;
         vlc->table[table_index][i][0] = -1;
     }


выглядит понятнее?
Врешь.Эквивалентный код:
Код: sql
1.
2.
3.
4.
    for (i = 0; i < table_size; i++) {
         vlc->table[table_index+i][1] = 0;
         vlc->table[table_index+i][0] = -1;
     }
...
Рейтинг: 0 / 0
04.06.2015, 17:01
    #38976546
Stanislav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
BarloneDimitry Sibiryakovпропущено...

Эквивалентный код:
Код: sql
1.
2.
3.
4.
    for (i = 0; i < table_size; i++) {
         vlc->table[table_index][i][1] = 0;
         vlc->table[table_index][i][0] = -1;
     }


выглядит понятнее?
Врешь.Эквивалентный код:
Код: sql
1.
2.
3.
4.
    for (i = 0; i < table_size; i++) {
         vlc->table[table_index+i][1] = 0;
         vlc->table[table_index+i][0] = -1;
     }


В принципе это то, что я описал в п.2. получается все же двумерный массив.
Спасибо!
...
Рейтинг: 0 / 0
04.06.2015, 17:12
    #38976567
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
BarloneВрешь
Может да, может нет. Это зависит от объявлений и физического размещения в памяти.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.06.2015, 08:15
    #38976947
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
Dimitry SibiryakovBarloneВрешь
Может да, может нет. Это зависит от объявлений и физического размещения в памяти.
Не зависит. &a[b] эквивалентно a+b, и a[b] эквивалентно *(a+b).
Код: plaintext
1.
table = &vlc->table[table_index];

эквивалентно
Код: plaintext
table = vlc->table + table_index
и дальше
Код: plaintext
table[i]
эквивалентно
Код: plaintext
*(vlc->table + table_index + i)
и также эквивалентно
Код: plaintext
vlc->table[table_index + i]
...
Рейтинг: 0 / 0
05.06.2015, 10:01
    #38977048
Stanislav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
А вот еще вопрос? есть выражение
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
int i=0
#define COPY(condition)  
{

 for(k=0; k<1000;k++)
{
       if (condition)
      {
           ....
      }
 i++;
}
}
Copy (i>10);


Как макрос будет работать с condition, он сразу примет как булеву переменную, или на каждой итерации будет подставлять
i>10, изменяя при этом значение i ?

Заранее благодарен.
...
Рейтинг: 0 / 0
05.06.2015, 10:19
    #38977079
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
Stanislav,

Это не будет работать, макрос криво записан. В многострочных макросах строки должны склеиваться символом \
...
Рейтинг: 0 / 0
05.06.2015, 10:32
    #38977095
Stanislav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
RWolfStanislav,

Это не будет работать, макрос криво записан. В многострочных макросах строки должны склеиваться символом \

Да я его в примере не поставил, символ есть, макрос на самом деле работает, я портирую рабочую библиотеку на C#, и вот не понятно как должен работать данный макрос.
...
Рейтинг: 0 / 0
05.06.2015, 10:39
    #38977104
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
Stanislav,

макрос просто подставляет текст в скобках вместо слова condition.
...
Рейтинг: 0 / 0
05.06.2015, 10:40
    #38977106
Stanislav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
RWolfStanislav,

макрос просто подставляет текст в скобках вместо слова condition.

Понял, спасибо!
...
Рейтинг: 0 / 0
11.06.2015, 12:17
    #38982080
Stanislav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
А вот такое выражение, что-то вообще не пойму что делает
Код: plaintext
1.
2.
3.
4.
5.
    
    uint8_t *dec;
    dec = frame->data + 1;
    for (x = 1; x < frame->width; x++, dec++)
        *dec += *(dec - 1);



тип frame->data - (uint8_t *data)
...
Рейтинг: 0 / 0
11.06.2015, 12:25
    #38982095
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
StanislavА вот такое выражение, что-то вообще не пойму что делает
...
тип frame->data - (uint8_t *data)
Код: plaintext
1.
2.
    for (x = 1; x < frame->width; x++)
        frame->data[x] += frame->data[x - 1];
...
Рейтинг: 0 / 0
11.06.2015, 12:31
    #38982115
Stanislav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
m_SlaStanislavА вот такое выражение, что-то вообще не пойму что делает
...
тип frame->data - (uint8_t *data)
Код: plaintext
1.
2.
    for (x = 1; x < frame->width; x++)
        frame->data[x] += frame->data[x - 1];




Спасибо, думал что-то сложнее )
...
Рейтинг: 0 / 0
06.07.2015, 10:08
    #39000240
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
griSval,

результат не определён, но, скорее всего, 500.
...
Рейтинг: 0 / 0
06.07.2015, 10:26
    #39000267
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
griSvalИ так вопрос что выйдет на консоли при выводе *pn
Может 500, может исключение из-за обращение к несуществующей памяти.
Если перед printf() будут другие malloc(), то может какое-нибудь другое число.

Никогда так не пиши, если не хочешь заниматься поисками глюков в коде, который работал, ты его не трогал, а он работать перестал.
...
Рейтинг: 0 / 0
06.07.2015, 11:03
    #39000309
griSval
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
RWolfgriSval,

результат не определён, но, скорее всего, 500.

А почему 500 почему не ноль. Для меня это нонсенс память же освобождена почему она сохраняется вот в чем вопрос. Что это за освобождение памяти когда свободная память продолжает быть инициализированой и к ней так же можно обращаться я пробовал так же и с
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
…
int *pn = new int;
*pn = 500;

delete pn;

cout << pn < *pn <<endl;
...


И значение *pn все по прежнему не меняется и продолжает быть инициализированым. Почему?
...
Рейтинг: 0 / 0
06.07.2015, 11:24
    #39000335
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что означает данное выражение на C
griSvalДля меня это нонсенс
Тогда повторяй школьный курс информатики: устройство компьютера, процессора и прочие
низкоуровневые вещи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что означает данное выражение на C / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]