c header

c - apiary free



#include en medio del código (3)

Me gustaría hacer una inclusión condicional de un archivo de encabezado en mi programa. ¿Es posible y, en caso afirmativo, cómo lo hago?

Mi idea es hacer algo como esto:

switch(opt) { case 0: { #include "matrix.h" break; } case 1: { #include "grid.h" break; } }

Así es como VS lo hizo cuando lo escribí. ¿Es correcto?


Me gustaría hacer una inclusión condicional de un archivo de encabezado en mi programa. ¿Es posible y, en caso afirmativo, cómo lo hago?

Sí, es posible.
El preprocesador C ya tiene directivas que admiten la compilación condicional Mejor uso

#ifndef expr #include "matrix.h" #else #include "grid.h" #endif

Si expr no ha sido definido, entonces matrix.h se incluirá de lo contrario si it is defined ( #define expr ) then se incluirá grid.h`.


En tiempo de compilación , puede tener control de bit de inclusión condicional de un archivo de encabezado

#ifdef MAGIC #include "matrix.h" #else #include "grid.h" #endif

en tiempo de compilación

gcc -D MAGIC=1 file.c

o

gcc file.c

Pero en tiempo de ejecución la inclusión condicional de un archivo de encabezado no es posible.

Significa que lo que muestra tu pseudo código no es posible.


Esto es 2 cosas diferentes El #include es una directiva de preprocesador que se procesa en tiempo de compilación . La swicth es una palabra clave C que se procesa en el momento de la ejecución .

Por lo tanto, puede usar las directivas de preprocesador condicional para elegir qué archivo incluir:

#ifdef MATRIX #include "matrix.h" #else #include "grid.h" #endif

O también puede incluir ambos, porque normalmente no importa si incluye un archivo de encabezado inútil.

#include "matrix.h" #include "grid.h" switch(opt) { case 0: /* Do something with matrix functions */ break; case 1: /* Do something with grid functions */ break; }