#include在代码中间

时间:2014-01-30 12:45:22

标签: c header

我想在我的程序中有条件地包含头文件。是否有可能,如果是的话,我该怎么做?

我的想法是做这样的事情:

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

当我写这篇文章时,VS就是这样做的。是不是?

3 个答案:

答案 0 :(得分:10)

编译时,您可以控制条件包含头文件

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

在编译时

gcc -D MAGIC=1 file.c 

gcc file.c

但是运行时 无法有条件地包含头文件

这意味着您的伪代码无法显示。

答案 1 :(得分:3)

  

我想在我的程序中有条件地包含头文件。是否可能,如果可以,我该怎么做?

是的,有可能。
C预处理器已经有支持条件编译的指令更好地使用

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

如果尚未定义expr,则会matrix.h包括it is defined (#define expr ) then grid.h` 。

答案 2 :(得分:1)

这是两件不同的事情。 #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;
}