我尝试过:
#ifdef USE_CPP20_MODULES
#define IMPORT_OR_INCLUDE(module_name, include_filepath) \
import module_name;
#else
#define IMPORT_OR_INCLUDE(module_name, include_filepath) \
#include include_filepath
#endif
但是没有一个编译器可以编译它:
铛:
Output of x86-64 clang 19.1.0 (Compiler #1)
<source>:6:2: error: '#' is not followed by a macro parameter
6 | #include include_filepath
| ^
海湾合作委员会(GCC):
<source>:5:56: error: '#' is not followed by a macro parameter
5 | #define IMPORT_OR_INCLUDE(module_name, include_filepath) \
我不明白预处理器为何会失败。
我猜你不能将其用作#include
宏的定义/替换?
#
对于预处理器来说有特殊含义。它是字符串化运算符。[cpp.stringize]
:由于
include
不是函数类宏中的参数,因此替换失败。#include
您也不能添加作为参数的参数:[cpp.replace]
:您可以
import
将此文件的所有 s 放在一个标题中,将所有include
s 放在不同的标题中,然后#include
根据以下内容放置您想要的标题USE_CPP20_MODULES
:或者只是:
或者直接在需要的地方执行此操作: