Supongo por # que es solo una utilidad de tiempo de compilación. ¿Cómo se puede usar en los programas C/C++?¿Cómo funciona #error en C/C++?
No encontré mucho al respecto en Internet. Cualquier enlace sería útil.
Supongo por # que es solo una utilidad de tiempo de compilación. ¿Cómo se puede usar en los programas C/C++?¿Cómo funciona #error en C/C++?
No encontré mucho al respecto en Internet. Cualquier enlace sería útil.
Hace que el compilador (o el preprocesador) emita el mensaje de error. En C++, también da mala forma a la unidad de traducción (es decir, hace que la compilación falle).
Si tiene varias macros que podrían definirse y quiere asegurarse de que solo se definan ciertas combinaciones de ellas, puede usar #error
para hacer que la compilación falle si se define una combinación no válida.
También puede ser útil si quiere estar seguro de que algún bloque de código nunca se compila (por alguna razón).
Aquí hay un enlace a la documentación del preprocesador Gnu explicar los #error
y #warning
directivas: http://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html
En particular:
La directiva
#error
hace que el preprocesador para informar de un error grave. Los tokens que forman el resto de la línea después de#error
se usan como el mensaje de error.
Véase también this question sobre la portabilidad de estas directivas.
La directiva' # error' es parte de los estándares del lenguaje C y C++ y es totalmente portable. '# warning' es una extensión de lenguaje específica de gcc. –
@james, gracias por la aclaración. – UncleZeiv
Útil para verificar la configuración del compilador y verificar las combinaciones de valores de macro. Algunos ejemplos al azar:
#if !defined(_DLL)
# error This code will only work properly when compiled with /MD
#endif
#if _WIN32_WINNT < 0x502
# error Sorry, Windows versions prior to XP SP2 are not supported
#endif
#if defined(_APPLE) && defined(_LINUX)
# error Conflicting operating system option selected, choose one.
#endif
¿Realmente manejas el último en la práctica? ¿No es responsabilidad del usuario no ser un cerebro muerto y no usar banderas de compilador sin sentido? No puede verificar * todo * ... – Thomas
Es solo un ejemplo. Tiende a agregar esto cuando tiene demasiadas llamadas de soporte. Boost está plagado de esto, por ejemplo. –
lo que quiere decir con "solo se definen ciertas combinaciones de macros". ¿Puedes citar un ejemplo? Gracias. – Moeb
@cambr: por ejemplo, si tiene dos macros, 'DO_X' y' DO_Y' y desea asegurarse de que solo se establezca una a la vez, puede ajustar una directiva '# error' en un' #if (DO_X definido) && (definido DO_Y) 'bloque. –
@cambr: Digamos que su empresa vende Slicer ™ y Dicer ™. Ambos productos usan 'blade.c', pero pasan diferentes macros a través del sistema de compilación para una funcionalidad ligeramente diferente. Entonces podría usar '#if SLICING ... #elif DICING ... #else #error Sin funcionalidad seleccionada por makefile. – Potatoswatter