почему это допустимо без значения l?
Значение l относится только к контексту присвоения. Выражение может быть написано без lvalue где-либо в поле зрения, например:
printf("hello\n");
или
x++;
или
SPIx->DR;
Все эти операторы являются допустимыми выражениями и могут использоваться в качестве значений r. (Вспомните, что printf
возвращает значение.) Единственное, что отличается от последнего, это то, что у него не будет побочных эффектов, кроме объявления volatile
SPIx
.