preprocesamiento - Comprobación del preprocesador si no se definen múltiples definiciones
que es include en c++ (2)
FWIW, la respuesta de @ SergeyL es excelente, pero aquí hay una pequeña variante para la prueba. Note el cambio en lógico o lógico y.
main.c tiene una envoltura principal como esta:
#if !defined(TEST_SPI) && !defined(TEST_SERIAL) && !defined(TEST_USB)
int main(int argc, char *argv[]) {
// the true main() routine.
}
spi.c, serial.c y usb.c tienen envoltorios principales para sus respectivos códigos de prueba como este:
#ifdef TEST_USB
int main(int argc, char *argv[]) {
// the main() routine for testing the usb code.
}
config.h que está incluido en todos los archivos c tiene una entrada como esta:
// Uncomment below to test the serial
//#define TEST_SERIAL
// Uncomment below to test the spi code
//#define TEST_SPI
// Uncomment below to test the usb code
#define TEST_USB
Tengo una selección de #defines en un encabezado que son editables por el usuario, por lo que deseo verificar que existan las definiciones en caso de que un usuario las elimine por completo, por ejemplo
#if defined MANUF && defined SERIAL && defined MODEL
// All defined OK so do nothing
#else
#error "User is stoopid!"
#endif
Esto funciona perfectamente bien, sin embargo, me pregunto si hay una mejor manera de verificar si las múltiples definiciones NO están en su lugar ... es decir, algo como:
#ifn defined MANUF || defined SERIAL ||.... // note the n in #ifn
o tal vez
#if !defined MANUF || !defined SERIAL ||....
para eliminar la necesidad de la sección vacía #if.
#if !defined(MANUF) || !defined(SERIAL) || !defined(MODEL)