使用C #define变量作为#include

时间:2013-07-26 00:42:59

标签: c c-preprocessor

我有以下代码,其中包含一个基于#define'd变量的库:

#if LIB_SELECTOR==1
#include "path/to/lib1.h"
#else
#include "path/to/lib2.h"
#endif

但是,这个库需要包含在许多源文件中,并且在所有这些文件中保持这种条件可能会有问题,并且容易出错。理想情况下,我会做一些像:

#if LIB_SELECTOR==1
#define DYNAMIC_LIB "path/to/lib1.h"
#else
#define DYNAMIC_LIB "path/to/lib2.h"
#endif

然后,在所有必需的源文件中,只需使用

#include DYNAMIC_LIB

我在我的代码中尝试过,并收到错误error: #include expects "FILENAME" or <FILENAME>。这并没有给我太多希望,但我想知道解决这个问题的正确方法是什么。

2 个答案:

答案 0 :(得分:3)

您应该使用的内容,但使用#include DYNAMIC_LIB的文件必须首先定义DYNAMIC_LIB。在失败的源文件上,您可以使用以下命令进行测试:

#ifndef DYNAMIC_LIB
#error "DYNAMIC_LIB is not defined!"
#endif
#include DYNAMIC_LIB

您不必在所有源文件中维护该条件。您可以创建一个具有条件的头文件,并让其他源文件包含该文件。例如:

/* lib_selector.h */
#pragma once
#if LIB_SELECTOR==1
#include "path/to/lib1.h"
#else
#include "path/to/lib2.h"
#endif

然后所有其他源文件都会#include "lib_selector.h"

答案 1 :(得分:2)

您可以将代码放入头文件中,并在任何地方都包含该头文件。

// CommonHeaders.h

#ifndef __COMMONHEADERS_H__
#define __COMMONHEADERS_H__

#if LIB_SELECTOR==1
#include "path/to/lib1.h"
#else
#include "path/to/lib2.h"
#endif

#endif // __COMMONHEADERS_H__

//你的许多其他.h / .cpp文件

#include "path/to/CommonHeaders.h"