Мы должны увидеть обратный вызов потока, чтобы знать наверняка, но это пахнет как подозрительный код, передающий целые числа по значению путем преобразования в / из void*
.
, поскольку обратный вызов pthread занимает void*
и возвращает void*
, очевидно, существует множество странных идей, что эти пустые указатели можно также использовать для передачи целых чисел по значению. То есть приведите целое число к / из void*
, вместо того, чтобы указатель указывал на выделенный объект.
Такие хрупкие хаки, возможно, сработали по счастливой случайности, когда мы все еще были в 32-битном P C эпохи. В наши дни меньше, когда указатели x86_64 обычно 64-битные, а int
остаются 32-битными.
Если в рассматриваемом коде используются такие хаки, то это объясняет странное и, казалось бы, бессмысленное приведение к unsigned long
.
Не не используйте такие дрянные хаки, точка.
Что касается самого выражения: bob == 0
, это простая логическая арифметика c. Совершенно нормально присвоить результат равенства / реляционных операторов переменной bool
. На практике тип возвращаемого значения этих операторов равен int
в C (в отличие от C ++), но этот тип возвращаемого значения можно смело рассматривать как тип bool
независимо от того.
Имейте в виду, что вы должны включить stdbool.h для использования bool
- в C это просто макрос для действительного логического ключевого слова _Bool
.