Por que em macros C++ usam do-while e if-else sem sentido?
Olá a todos! Programo em C++ há cerca de seis meses e comecei a estudar macros do pré-processador. Frequentemente, em código alheio e em arquivos de cabeçalho do sistema (como Boost ou Qt), vejo macros envolvidas em construções estranhas como `do { ... } while(0)` ou `if (1) { ... } else (void)0`. Aqui está um exemplo:
```cpp
#define LOG_ERROR(msg) do { \
std::cerr << "ERROR: " << msg << std::endl; \
} while(0)
#define SAFE_DELETE(p) if (p) { delete p; p = nullptr; } else (void)0
```
À primeira vista, isso parece completamente sem sentido: por que usar um `do-while` que é garantido de executar exatamente uma vez? Por que não escrever simplesmente um bloco de código entre chaves? E o que é esse estranho `else (void)0` no final da segunda macro?
Tentei escrever minha própria macro sem esses invólucros:
```cpp
#def
No answers yet.
Faça login para deixar uma resposta