powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что делает этот код?
25 сообщений из 38, страница 1 из 2
Что делает этот код?
    #40041361
Что это макрос, после которого можно ставить точку с запятой, понимаю даже я. Но какое отношение всё это имеет к блокировке и что вообще достигает этот код из драйвера VDFS для линукс?

lockdep.h:

Код: plaintext
1.
#define lockdep_assert_held(l)			do { (void)(l); } while (0)



vdfs4.h:

Код: plaintext
1.
lockdep_assert_held(&inode->i_mutex);
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041365
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сибирский Пушистый
что вообще достигает этот код
Я понимаю, что с IQ<300 догадаться невозможно, поэтому подскажу: в зависимости от флагов компиляции может быть разное определение у макроса с одним и тем же именем. Приведённое в ОП-посте определение является специально ничего не делающим.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041372
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После макро-процессинга будет нечто вроде

Код: plaintext
1.
2.
3.
do { 
  (void)(&inode->i_mutex); 
} while (0);
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041394
mayton,

У меня, конечно же, и близко нет 300 айкю, и человек я простой: когда пишу код, то он выполняет какую-то функцию.
Но какую функцию выполняет ЭТО? Оно же вообще ничего не делает. Или я ошибаюсь?
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041396
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сибирский Пушистый
mayton,

У меня, конечно же, и близко нет 300 айкю, и человек я простой: когда пишу код, то он выполняет какую-то функцию.
Но какую функцию выполняет ЭТО? Оно же вообще ничего не делает. Или я ошибаюсь?

Во первых, на сайте www.kernel.org лежат исходники. И там прокомментирован этот макрос.
Я попробовал разобраться, но не очень понял о чём они пишут. Но это не код, который что-то должен делать. Это
какой-то костыль, который что-то должен проверять. Например, то что у типа структуры "inode" есть поле данных
"i_mutex". Иначе оно не будет компилироваться. Зачем это нужно? ХЗ.

Код: plaintext
1.
2.
3.
do { 
  (void)(&inode->i_mutex); 
} while (0);


Зачем тут цикл тоже не понятно. Похоже на какой-то грязный хак, когда люди знают как работает компилятор и
пытаются его обмануть зачем-то.

И я не понимаю, почему указатель на некую переменную может приводиться к void. Не к void*, а к void! Хотя где-то
я видел такое.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041399
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
Сибирский Пушистый
что вообще достигает этот код
Я понимаю, что с IQ<300 догадаться невозможно, поэтому подскажу: в зависимости от флагов компиляции может быть разное определение у макроса с одним и тем же именем. Приведённое в ОП-посте определение является специально ничего не делающим.

Специально ничего не делающим этот макрос выглядел бы так:

Код: plaintext
1.
#define lockdep_assert_held(l)
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041403
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сибирский Пушистый
Но какую функцию выполняет ЭТО? Оно же вообще ничего не делает. Или я ошибаюсь?
Да, оно вообще ничего не делает. Могу повторить ещё раз: в зависимости от флагов компиляции, ну а если точнее от параметров конфига ядра, может использоваться другое определение макроса с именем `lockdep_assert_held`. Которое делает более осмысленные вещи. Почему ты спрашиваешь на форуме АСУчивателей складов вместо того, чтобы посмотреть на https://elixir.bootlin.com/linux/latest/ident/lockdep_assert_held ? Тут вместо помощи будут полтреда пучить глаза на идиоматические сишные конструкции и рассказывать что бы прошло ревью у них в конторе, а что бы не прошло.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041404
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest

petrav, пожалуйсто вернись к программированию на 1C.

PS: Тебе нужно нам пояснить, почему при таких параметрах условной компиляции этот макрос выглядит именно так:

Код: plaintext
1.
#define lockdep_assert_held(l)			do { (void)(l); } while (0)


Зачем тут цикл, зачем приведение к void и т.д.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041406
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЗачем тут цикл, зачем приведение к void и т.д.

Весь остальной букварь грязных Си-трюков тоже процитировать, начиная с "a=b=c=0" и
"++p*=*q++"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041408
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravЗачем тут цикл, зачем приведение к void и т.д.

Весь остальной букварь грязных Си-трюков тоже процитировать, начиная с "a=b=c=0" и
"++p*=*q++"?..

Приведённое тобой — это не грязные трюки. Это штатный и очевидный функционал Си.
Осталось сверится с таблицей приоритетов операторов.

На мои вопросы тебе есть что ответить?
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041409
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav
a guest

petrav, пожалуйсто вернись к программированию на 1C.

В твоей команде на 1С платят мало, потому что твой хлебозавод загибается.
Всё потому что кто-то бегает выяснять зачем в сишных макросах пишут `do { ... } while (0)` вместо того, чтобы заниматься своими прямыми обязанностями.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041410
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravНа мои вопросы тебе есть что ответить?

Твои вопросы - тоже штатный и очевидный функционал макросов.

Параметр используется чтобы компилятор не пропустил инвалидное выражение в нём.
Он используется в круглых скобках чтобы обойти грабли с нетривиальными выражениями (гугли
"зачем скобки вокруг параметров в макросе").
Он приводится к void чтобы подавить предупреждение о неиспользуемом результате.
Он в цикле чтобы обойти грабли взаимодействия с if без кривых скобок (опять гугли "зачем
фиктивный цикл в макросах").
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041411
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
petrav
пропущено...

В твоей команде на 1С платят мало, потому что твой хлебозавод загибается.
Всё потому что кто-то бегает выяснять зачем в сишных макросах пишут `do { ... } while (0)` вместо того, чтобы заниматься своими прямыми обязанностями.

Объясни, плиз, зачем это (такой цикл) пишут в сишных макросах? И зачем приведение к `void`? Пожалуйста.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041459
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мемберов не обсуждаем!
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041486
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Он приводится к void чтобы подавить предупреждение о неиспользуемом результате.

Спасибо, этого не знал. В Студии такого преобразования не требуется. По крайней на третьем уровне варнингов.

Dimitry Sibiryakov
Он в цикле чтобы обойти грабли взаимодействия с if без кривых скобок (опять гугли "зачем
фиктивный цикл в макросах").

Да, и это в новинку. Но такой фиктивный цикл используется что бы обрамлять несколько выражений разделённых точкой с запятой. Я так вижу что тут это излишне.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041563
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЯ так вижу что тут это излишне.

То, что конкретно в этом макросе такое не случится, ещё не повод для него нарушать правила
написания безопасных макросов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041601
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav
Но такой фиктивный цикл используется что бы обрамлять несколько выражений разделённых точкой с запятой. Я так вижу что тут это излишне.
Фиктивный цикл делает вызов макроса стейтментом вместо выражения.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041619
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, макросы — зло.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041620
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для тех, кому Си и С++ слишком сложны - были созданы Ява и С-шарп.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041628
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Для тех, кому Си и С++ слишком сложны - были созданы Ява и С-шарп.

Ну... это тоже есть. Но главная задача все-таки стояла другая. Поэтому камент не полный.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041659
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Для тех, кому Си и С++ слишком сложны - были созданы Ява и С-шарп.

Подмена понятий. :) Страуструп тоже считает макросы злом.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041662
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
petrav
Но такой фиктивный цикл используется что бы обрамлять несколько выражений разделённых точкой с запятой. Я так вижу что тут это излишне.
Фиктивный цикл делает вызов макроса стейтментом вместо выражения.

Инструмент не по делу применён.

Кстати, забавно. Поскольку речь явно идёт о блокировках и мьютексах, то зачем макрос, который при данных настройках компилятора, ничего не делает? Они код собирают в однопоточном или многопоточном режиме? Наверное, да.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041669
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так поищи другие определения этого макроса и посмотри при каких условиях они используются.

PS: А Страуструп придумал макросы 2.0 - темплейты. Естественно, первую версию он будет считать злом.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041699
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Ну так поищи другие определения этого макроса и посмотри при каких условиях они используются.

PS: А Страуструп придумал макросы 2.0 - темплейты. Естественно, первую версию он будет считать злом.
Вообще-то, он не считает их злом. Неудобными - да. Малоконтролируемыми - да. Но злом не считает.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041724
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Ну так поищи другие определения этого макроса и посмотри при каких условиях они используются.

Я в линуксе разбираться не хочу. Может нам mayton поможет? Зачем этот макрос?
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что делает этот код?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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