"0 - rd_ptr" эквиавалентно переводу значения rd_ptr в дополнительный код, при сложении с wr_ptr в результате получается операция вычитания. Суть в том, что значение size получается положительным (разность по модулю) в результате любого ветвления. Кстати, обращаю внимание что переменная size здесь имеет тип unsigned int, а переменные rd_ptr и wr_ptr unsigned long. Если бы константой был не 0, который при любой раскладе = 0, то нужно было бы записывать как size = 0L - rd_ptr + wr_ptr ; или size = (ulong)0 - rd_ptr + wr_ptr ; в противном случае операция была бы не с ulong-овскими числами, а с uint-овскими и результат мог быть неверен. Хотя в этом примере видимо предполагается, что значение size не бывает больше, чем 65535.
|