【问题标题】:How to use a #define inside a C include statement?如何在 C 包含语句中使用#define?
【发布时间】:2019-09-27 12:29:56
【问题描述】:

我有一个在两个平台之间进行选择的头文件:

#pragma once

#ifdef _WINDOWS
#define PAR_CLASS           TestPar
#define PAR_INCLUDE_FILE    "TestPar.h"
#else
#define PAR_CLASS           Par
#define PAR_INCLUDE_FILE    "Par.h" 
#endif

有了这个,我可以使用以下行来包含一个头文件:

#include "ClassNames.h" 

#include PAR_INCLUDE_FILE

但是,我希望有更多的类,对于 PAR_CLASS 和 PAR_INCLUDE_FILE,唯一不同的是 " 和 .h 我想要的是在#include 中使用 PAR_CLASS,类似于:

#include "PAR_CLASS.h"

但这不起作用......这样的事情可能吗?

我希望它可以在 Visual Studio (2019) 和 Arduino IDE 中运行。

【问题讨论】:

  • 可能是令牌粘贴? #include PAR_CLASS ## ".h"?
  • @barmar:不能使用标记粘贴来进行字符串文字连接,也不能在预处理器指令中使用字符串文字连接。

标签: c include preprocessor


【解决方案1】:

为什么在逻辑中没有#include 语句?类似的东西

#ifdef _WINDOWS
#include "TestPar.h"
#else
#include "Par.h" 
#endif

并将#define 移动到各自的包含文件中

【讨论】:

  • 因为我不想将所有这些条件包含在我需要包含文件的所有文件中。
  • 你为什么要把它放在很多文件里?你把它放在一个包含文件中并包含它
  • 不是很多,而是所有需要包含某个头文件的文件(对于更大的程序来说,这可以加起来相当多)。
【解决方案2】:

您可以使用以下宏结构来实现它:

#define stringify(x) #x
#define GEN_INC_PATH(a) stringify(a.h)

#include GEN_INC_PATH(PAR_CLASS)

【讨论】:

    猜你喜欢
    • 2012-01-29
    • 2014-06-14
    • 1970-01-01
    • 2011-03-11
    • 2021-01-17
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多