如何在C语言的include语句中使用#define?

3

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

#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
@barmar:你不能使用标记粘贴来进行字符串字面值的连接,也不能在预处理器指令中使用字符串字面值的连接。 - rici
2个回答

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

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

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

#include GEN_INC_PATH(PAR_CLASS)

0
为什么不能将#include语句放在逻辑代码内部?就像这样。
#ifdef _WINDOWS
#include "TestPar.h"
#else
#include "Par.h" 
#endif

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


因为我不想在需要包含这些文件的所有文件中都放置这些条件包含。 - Michel Keijzers
为什么要把它放在很多文件中?你可以将其放在一个包含文件中并进行包含。 - Chris Turner
不是很多,但所有需要包含特定头文件的文件(对于更大的程序可能会累加相当多)。 - Michel Keijzers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接