Pregunta

Tengo una macro que solo me gustaría ser llamado en el alcance de los archivos. Sería genial si pudiera quejarse de alguna manera (en tiempo de compilación, o en tiempo de ejecución) si se usa dentro de una función. ¿Esto es posible?

Editar: Para responder a los comentarios hasta ahora: tengo objetos estáticos que se usan repetidamente en mi base de código. He creado macros para que cree estos objetos más rápido para escribir, ya que estos objetos se usan en todo el lugar, hasta el punto donde se guardan pulsaciones de teclas para productividad / molestia.

hasta este punto, había estado creando estos objetos como estática dentro de las funciones. Recientemente descubrió que esto no es seguro. Estoy decidiendo mover todos estos objetos fuera de las funciones para que se creen en el inicio del programa en lugar de perezosamente. Solo pensé que podría ser bueno tener un fallo de falla para evitar que este error se establezca nuevamente en el futuro.

Para ser claro, esto no está conteniendo el progreso en absoluto. Es solo algo que pensé que sería una buena adición a la macro si es fácil / posible.

¿Fue útil?

Solución

Lo que está buscando es un constructo que funciona en el nivel de archivo pero no en el nivel de función.Fuera de la parte superior de mi cabeza, los espacios de nombres deben ajustarse a la factura.

#define FOO(x) namespace { x }

FOO(int bar = 42;) // Compiles

void f() {
    FOO(int bar = 42;) // Doesn't compile
}

Dado que no sé exactamente lo que está tratando de envolver, mantengo a esta macro lo más simple posible.Cualquier implementación real debe usar los trucos de creación de macro estándar para asegurarse de que sea agradable y seguro.

Tenga en cuenta que los espacios de nombres anónimos lo harán, por lo que cada objeto creado dentro de ella solo se puede ver a la unidad de compilación actual.En su caso, este no debe ser un problema porque su objeto solía ser declarado en el nivel de función y no fue visible fuera de la unidad de compilación actual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top