gpt4 book ai didi

c++ - 在 C++ 中定义顶级空操作?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:38 25 4
gpt4 key购买 nike

根据 C++ 标准,以下内容是否合法? (如果答案因标准而异,我也想知道。)

#define VERY_OLD_COMPILER 1

#ifdef VERY_OLD_COMPILER
#define USING_NAMESPACE_STD enum { }
#else
#define USING_NAMESPACE_STD using namespace std
#endif

USING_NAMESPACE_STD;

int main(int argc, char *argv[]) {
// etc.

目标是定义一个我可以在顶层调用的宏并在后面跟一个分号,这样它就没有效果了。我很确定在顶层使用杂散的分号是不允许的(无论如何,GCC 都会提示它们),所以简单地定义一个空宏是行不通的。

声明一个空的匿名结构不起作用,因为它需要一个名称,我不想污染命名空间。

匿名空枚举声明 (enum { }) 是否有效?它适用于我尝试过的所有编译器,但这当然与规范所允许的不同。

欢迎任何其他想法/评论。好吧,除了“扔掉那个编译器”之外的任何事情。相信我,我很乐意。

最佳答案

查看最新的公开 C++0x 草案,似乎允许和忽略顶层的分号。

语法将 translation-unit 视为一系列 declaration,在各种声明中有一个 empty-declaration 那只是一个简单的分号。

实用解决方案:考虑到您的 VERY_OLD_COMPILER 常量表明整个事情是旧编译器的解决方法的一部分,我只选择一个解决方案适用于此编译器,无论是否标准化。

关于c++ - 在 C++ 中定义顶级空操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6838068/

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