#pragma once vs include guards: o que escolher para proteção contra inclusão múltipla?
Olá a todos! Sou um desenvolvedor C++ iniciante e já me deparei várias vezes com o problema de inclusão dupla de arquivos de cabeçalho. Por exemplo, tenho este código:
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b) { return a + b; }
#endif
// main.cpp
#include "math_utils.h"
#include "math_utils.h" // incluí acidentalmente duas vezes
int main() {
return add(2, 3);
}
Com include guards tudo funciona, mas notei que muitos projetos modernos (como os do Boost) usam #pragma once. Li que esta é uma diretiva não padrão, mas é suportada por todos os principais compiladores.
Estou interessado em:
- Existem problemas reais de desempenho com include guards?
- Por que
#pragma onceé considerada uma solução mais "limpa"? #pragma oncepode causar erros se o arquivo for copiado ou estiver em pastas diferentes?- O que escre