Por que macros C++ usam do-while e if-else sem sentido?
Olá! Comecei a estudar C++ e me deparei com um padrão estranho em macros. Frequentemente vejo em código de bibliotecas (por exemplo, Qt ou Boost) construções como:
```cpp
#define LOG_ERROR(msg) do { \
std::cerr << "ERROR: " << msg << std::endl; \
} while(0)
```
Ou:
```cpp
#define SAFE_DELETE(p) if(p) { delete p; p = nullptr; } else (void)0
```
À primeira vista, isso parece completamente sem sentido. Por que escrever `do { ... } while(0)`, se o loop é executado exatamente uma vez? E por que não escrever simplesmente:
```cpp
#define LOG_ERROR(msg) std::cerr << "ERROR: " << msg << std::endl
```
Tentei usar uma macro simples sem do-while, e funcionou em um caso simples. Mas depois a inseri em uma condição if-else, e o código quebrou. Por exemplo:
```cpp
#define LOG_ERROR(msg) std::cerr <<
No answers yet.
Faça login para deixar uma resposta