我想在我的程序中有条件地包含头文件。是否有可能,如果是的话,我该怎么做?
我的想法是做这样的事情:
switch(opt)
{
case 0:
{
#include "matrix.h"
break;
}
case 1:
{
#include "grid.h"
break;
}
}
当我写这篇文章时,VS就是这样做的。是不是?
答案 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;
}