¿Qué son las expresiones con efectos secundarios y por qué no deberían pasarse a una macro?

Encontré una declaración en el texto C Cómo programar:

"Las expresiones con efectos secundarios (es decir, los valores variables se modifican) no deben pasarse a una macro porque los argumentos de macro pueden evaluarse más de una vez".

Mi pregunta es ¿qué son las expresiones con efectos secundarios y por qué no deberían pasarse a una macro?

Respuestas a la pregunta(3)

Su respuesta a la pregunta