2014-01-30 4 views
6

Я хотел бы включить условное включение файла заголовка в свою программу. Возможно ли, и если да, как мне это сделать?#include в середине кода

Моя идея заключается в том, чтобы сделать что-то вроде этого:

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

Вот как VS сделал это, когда я написал. Это правильно?

ответ

10

В время компиляции вы можете иметь разрядное управление условного включения заголовочного файла

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

во время компиляции

gcc -D MAGIC=1 file.c 

или

gcc file.c 

Но время выполненияусловное включение файла заголовка невозможно.

Это значит, что ваш псевдо-код показывается невозможен.

+0

Кроме того, во время выполнения это не имеет никакого смысла. Программа должна была бы связать себя «на лету». Существуют и другие способы достижения такой функциональности: файлы, библиотеки DLL и т. Д. – Lundin

+0

да во время выполнения это не имеет никакого смысла. Но OP продемонстрировал свою заинтересованность в том, чтобы сделать это как время выполнения в псевдокоде, поэтому я сказал это. –

3

Я хотел бы включить условное включение файла заголовка в свою программу. Возможно ли, и если да, как мне это сделать?

Да, это возможно.
C препроцессор уже директивы, которые поддерживают условной компиляции Лучше использовать

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

expr Если не определен, то matrix.h получить включены в противном случае, если it is defined ( #define выраж) then grid.h` получить включены.

+0

Вы имеете в виду '# elsif'? –

+0

@JensGustedt; Да. Я имею в виду 'elif'. – haccks

1

Это 2 разных вещи. #include является директивой препроцессора, которая обрабатывается во время компиляции. swicth - ключевое слово C, которое завершено во время выполнения.

Таким образом, вы можете использовать conditional preprocessor directives для того, чтобы выбрать, какой файл включить:

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

Или вы можете также включать в себя как, потому что нормально, это не имеет значения, если вы включите бесполезный файл заголовка.

#include "matrix.h" 
#include "grid.h" 


switch(opt) { 
case 0: 
     /* Do something with matrix functions */ 
     break; 

case 1: 
     /* Do something with grid functions */ 
     break; 
} 
Смежные вопросы