gpt4 book ai didi

C++ "undefine"include 中的模块关键字

转载 作者:太空狗 更新时间:2023-10-29 20:19:40 27 4
gpt4 key购买 nike

我想在 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 的成员的类型这一事实不会造成问题。有一个名为 moduletype 更糟(如果你有一个该类型的全局变量更糟 - 这可能会导致问题,但至少可以重写你的代码以消除在这些情况下使用 module 的歧义。

关于C++ "undefine"include 中的模块关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57286326/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com