powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что делает этот код?
13 сообщений из 38, страница 2 из 2
Что делает этот код?
    #40041762
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЯ в линуксе разбираться не хочу.

Я где-то сказал "разбираться"? Я сказал просто найти "define" этого макроса и посмотреть
на них. Я понимаю, это сложно...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041784
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Dimitry Sibiryakov
Ну так поищи другие определения этого макроса и посмотри при каких условиях они используются.

Я в линуксе разбираться не хочу. Может нам mayton поможет? Зачем этот макрос?

Честно - не знаю.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041809
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть опции компилятора, которые считают не использованную переменную или параметр ошибкой.

Что бы ошибки не происходило используют подобный макрос.

Код предотвращает ошибку компиляции.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041819
[quot petrav#22274415]
Сибирский Пушистый
mayton,

Это какой-то костыль, который что-то должен проверять. Например, то что у типа структуры "inode" есть поле данных
"i_mutex". Иначе оно не будет компилироваться.


А оно и без макроса не будет компилироваться.
Я же с самого начала объяснил, что цикл там для того, чтобы можно было поставить ; после макроса, что в свою очередь нужно, чтобы читающие этот код не делали большие глаза от отсутствия ; и им бы казалось, что всё нормально, что это с++ а не ж с ушами.
Единственное непонятно - зачем этот макрос вообще, когда он ничего не делает и ничего не добавлят функционально в код.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041821
blonduser
Есть опции компилятора, которые считают не использованную переменную или параметр ошибкой.

Что бы ошибки не происходило используют подобный макрос.

Код предотвращает ошибку компиляции.


Я видел их мейкфайл. Там не используются эти опции, и их код сыпет предупреждениями, как горохом.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40041878
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Антошка конечно не сахар, но в чем то он прав.

Реальный смысл этого макроса во второй ветке дефайна CONFIG_LOCKDEP, а в этой - пустышка, аналог
Код: plaintext
1.
2.
3.
{
1;
}



Впрочем, он себе льстит, IQ 300 тут не нужно, хватит и 130+ =)
...
Рейтинг: 0 / 0
Что делает этот код?
    #40042058
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl
Антошка конечно не сахар, но в чем то он прав.

Реальный смысл этого макроса во второй ветке дефайна CONFIG_LOCKDEP, а в этой - пустышка, аналог
Код: plaintext
1.
2.
3.
{
1;
}



Впрочем, он себе льстит, IQ 300 тут не нужно, хватит и 130+ =)

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

Так он непустой в отладочной версии ядра
Код: plaintext
1.
2.
3.
#define lockdep_assert_held(l)	do {				\
		WARN_ON(debug_locks && !lockdep_is_held(l));	\
	} while (0)
...
Рейтинг: 0 / 0
Что делает этот код?
    #40042282
Siemargl
petrav,

Так он непустой в отладочной версии ядра
Код: plaintext
1.
2.
3.
#define lockdep_assert_held(l)	do {				\
		WARN_ON(debug_locks && !lockdep_is_held(l));	\
	} while (0)



надеюсь, что ковид достанет таких разрабов скорее раньше, чем позже.
...
Рейтинг: 0 / 0
Что делает этот код?
    #40042312
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если тебе не нравится ядро Линкса - не пользуйся им.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что делает этот код?
    #40042335
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некто Йоханес Берг закоммитил это в 2013 году.

Можно попробовать почитать его пояснение по этому поводу.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
commit b1ae345d971664f70cfdc293029c40ccfb093591
Author: Johannes Berg <johannes.berg@intel.com>;
Date:   Thu Feb 21 16:42:47 2013 -0800

    lockdep: make lockdep_assert_held() not have a return value
    
    I recently made the mistake of writing:
    
      foo = lockdep_dereference_protected(..., lockdep_assert_held(...));
    
    which is clearly bogus.  If lockdep is disabled in the config this would
    cause a compile failure, if it is enabled then it compiles and causes a
    puzzling warning about dereferencing without the correct protection.
    
    Wrap the macro in "do { ...  } while (0)" to also fail compile for this
    when lockdep is enabled.
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>;
    Cc: Peter Zijlstra <peterz@infradead.org>;
    Cc: Ingo Molnar <mingo@redhat.com>;
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>;
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>;

diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
index 2bca44b0893c..bfe88c4aa251 100644
--- a/include/linux/lockdep.h
+++ b/include/linux/lockdep.h
@@ -359,7 +359,9 @@ extern void lockdep_trace_alloc(gfp_t mask);
 
 #define lockdep_depth(tsk)	(debug_locks ? (tsk)->lockdep_depth : 0)
 
-#define lockdep_assert_held(l)	WARN_ON(debug_locks && !lockdep_is_held(l))
+#define lockdep_assert_held(l)	do {				\
+		WARN_ON(debug_locks && !lockdep_is_held(l));	\
+	} while (0)
 
 #define lockdep_recursing(tsk)	((tsk)->lockdep_recursion)
 
...
Рейтинг: 0 / 0
Что делает этот код?
    #40042399
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl
petrav,

Так он непустой в отладочной версии ядра
Код: plaintext
1.
2.
3.
#define lockdep_assert_held(l)	do {				\
		WARN_ON(debug_locks && !lockdep_is_held(l));	\
	} while (0)


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

Я так примерно понял, что Johannes Berg по ошибке подставил lockdep_assert_held()
как аргумент функции. И в одной из конфигураций у него это компилировалось. А
когда он добавил псевдо-цикл, то перестало компилироваться в обоих конфигурациях.
Компилятор, очевидно, Си — это же ядро ОС.

Короче, Си — зло, макросы — зло. Только C# , потому что он лучше Java.
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что делает этот код?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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