【发布时间】:2019-11-14 10:44:21
【问题描述】:
我的意思是这样的情况:
#define __STDC_FORMAT_MACROS 1
#include <inttypes.h>
这个确切的例子可能很少用,但这只是一个例子,这种方法被广泛使用,尤其是在项目内部。为系统或编译器类型和版本定义的宏采用类似的方式,编译器命令行中定义的宏也是如此。
我的问题是,当您已经有一个使用普通名称的模块时,是否存在某种机制可供即将使用import 声明的开发人员使用,如下所示:
#define __STDC_FORMAT_MACROS 1
#export __STDC_FORMAT_MACROS
import std.inttypes;
或者,也许更好 - 指定导出到模块的参数专门用于它(不会传播到其他模块)。有没有什么机制可以实现?
【问题讨论】:
-
仅供参考:在这种特殊情况下,这种参数化将毫无意义。
__STDC_FORMAT_MACROS用于告诉头部声明一些宏;imports 的实际模块无法导出宏。只有遗留模块头可以。 -
@NicolBolas:我的问题不在于模块是否可以在导入它们之前看到定义的宏,而是是否提供了任何可用于实现类似结果的功能。
-
你错过了我的意思。即使有一个特性,在这种情况下也无济于事,因为那个特定的“参数”会导致标题生成宏。而且您不能在实际模块中使用
import宏。 -
但是上面的例子并没有
import模块中的宏——它声明了一个旨在在模块内被看到和解释的符号。如果您谈论的是inttypes.h提供的特定宏,那超出了问题的范围。 -
我知道这超出了问题的范围。这就是为什么我将其设为“供您参考”评论而不是我的答案的一部分。我的观点很简单,在这种特殊情况下,它不会完成任何事情,因为该宏更改的特定内容不会通过模块导入可见。所以你的具体例子根本没有用。这就是我要说的。
标签: c++ c++20 c++-modules