C++ 包含中的"未定义"模块关键字
C++ "undefine" module keyword in include
我想在Visual Studio中使用C++20模块,但我的一个项目使用Magick++,它定义了一个struct
,其中的成员char*
"magick++.h"中名为"module":
typedef struct _MagickInfo { char *name, *description, *version, *mime_type, *note, *module; /* offending member here */ /* ... other members ... */ } MagickInfo;
我可以告诉编译器不处理该特定 #include 中的"模块"吗?
module
不是关键字(您可以在 [lex.key] 中找到关键字列表并验证它不存在)。
相反,它是一个"具有特殊含义的标识符"([lex.name]/2),通常称为上下文相关关键字。
也就是说,只有某些地方打算使用module
"关键字",因为模块声明不能出现在任何地方。只有那些特定的地方才会被视为模块声明。有关编译器如何进行此消除歧义的更全面处理,请参阅 P0924。
使module
(和import
)上下文敏感的动机之一是module
实际上是代码中相当常用的标识符 - 它不仅仅是Magick++,还有Vulkan。
简而言之,您有一个名为module
的成员的类型这一事实不会引起问题。拥有一个名为module
的类型会更糟(如果您拥有该类型的全局变量,则更糟 - 这可能会导致问题,但至少可以重写代码以消除在这些情况下使用module
的歧义)。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- C++中的"inline"关键字
- 如何确保C++函数在定义之前声明(如override关键字)
- 尝试导入pybind-opencv模块时出现libgtk错误
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 谷歌模拟和覆盖关键字
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 内联如何影响模块接口中的成员函数
- C++返回 Numpy 数组的 Python 扩展模块
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 如何从线程中的不同模块调用函数?
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 为什么"delete"关键字不删除节点?
- 如何使用 soong 命名空间来有条件地编译模块
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 在 c++ 中正确定义"this"关键字?
- C++ 包含中的"未定义"模块关键字
- 在cpp项目(VS2005)内部编译的c模块中无法识别内联关键字