O que são expressões com efeitos colaterais e por que não devem ser passadas para uma macro?

Me deparei com uma declaração no texto C Como programar:

"Expressões com efeitos colaterais (ou seja, valores variáveis são modificados) não devem ser transmitidas para uma macro porque os argumentos da macro podem ser avaliados mais de uma vez.".

Minha pergunta é o que são expressões com efeitos colaterais e por que elas não devem ser passadas para uma macro?

questionAnswers(3)

yourAnswerToTheQuestion