Avatar ·

Pourquoi utilise-t-on des do-while et if-else apparemment inutiles dans les macros C++ ?

Bonjour ! J'ai commencé à étudier le C++ et je suis tombé sur un motif étrange dans les macros. Je vois souvent dans le code des bibliothèques (par exemple, dans Qt ou Boost) des constructions comme : ```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 ``` À première vue, cela semble totalement inutile. Pourquoi écrire `do { ... } while(0)`, si la boucle s'exécute exactement une fois ? Et pourquoi ne pas écrire simplement : ```cpp #define LOG_ERROR(msg) std::cerr << "ERROR: " << msg << std::endl ``` J'ai essayé d'utiliser une macro simple sans do-while, et elle a fonctionné dans un cas simple. Mais ensuite, je l'ai insérée dans une condition if-else, et le code s'est cassé. Par exemple : ```cpp #define LOG_ERROR(msg) std::cerr <<