Что такое выражения с побочными эффектами и почему они не должны передаваться макросу?

Я наткнулся на утверждение в тексте C Как программировать:

«Выражения с побочными эффектами (т. Е. Значения переменных изменены) не должны передаваться макросу, потому что аргументы макроса могут оцениваться более одного раза».

Мой вопрос: что такое выражения с побочными эффектами и почему они не должны передаваться макросу?