Я пишу драйвер Linux для своего китайского arduino. В какой-то момент мне нужно изменить скорость передачи. Я искал примеры и обнаружил, что листинг:Что делает этот оператор?
Listing 2 - Setting the baud rate.
struct termios options;
/*
* Get the current options for the port...
*/
tcgetattr(fd, &options);
/*
* Set the baud rates to 19200...
*/
cfsetispeed(&options, B19200);
cfsetospeed(&options, B19200);
/*
* Enable the receiver and set local mode...
*/
options.c_cflag |= (CLOCAL | CREAD);
/*
* Set the new options for the port...
*/
tcsetattr(fd, TCSANOW, &options);
Следующего последнюю строку коды имеет оператор |=
. Что оно делает? Я никогда этого не видел.
'a | = b;' -> 'a = a | b; '(с той разницей, что' a' оценивается только один раз с помощью оператора '| =', спасибо Filipe!) – Kninnug
'| =' является составным побитовым оператором 'inclusive OR'. – haccks
@Kninnug Это, как правило, верно, но чтобы быть технически корректным, вы должны упомянуть, что 'a | = b' эквивалентно' a = a | b', за исключением того, что 'a' оценивается только один раз. Это важно, если выражение 'a' имеет побочные эффекты. –