命名空间“cmb1”导致 C++编译错误

发布于 2024-12-03 05:03:36 字数 718 浏览 2 评论 0原文

当我尝试编译此代码时:

#include <windows.h>

namespace cmb1 {
}

void main() {}

我得到以下信息:

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.
a.cc
a.cc(3) : error C2059: syntax error : 'constant'
a.cc(3) : error C2143: syntax error : missing ';' before '{'
a.cc(3) : error C2447: '{' : missing function header (old-style formal list?)

cmb2cmb3cmb4 的情况同上。我在那一刻停了下来。 cm4,顺便说一句,编译得很好。

我尝试用其他东西包围命名空间:

namespace dilum {
namespace cmb4 {
}
}

但编译仍然失败。

到底是怎么回事?

When I try to compile this code:

#include <windows.h>

namespace cmb1 {
}

void main() {}

I get this:

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.
a.cc
a.cc(3) : error C2059: syntax error : 'constant'
a.cc(3) : error C2143: syntax error : missing ';' before '{'
a.cc(3) : error C2447: '{' : missing function header (old-style formal list?)

Ditto for cmb2, cmb3 and cmb4. I stopped at that point. cm4, btw, compiles just fine.

I tried surrounding the namespace with something else:

namespace dilum {
namespace cmb4 {
}
}

But the compile still failed.

What is going on?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

心作怪 2024-12-10 05:03:36

来自 windows.h:

#define cmb1 0x470
#define cmb2 0x471
#define cmb3 0x472
#define cmb4 0x473
#define cmb5 0x474
#define cmb6 0x475
#define cmb7 0x476
#define cmb8 0x477
#define cmb9 0x478
#define cmb10 0x479
#define cmb11 0x47A
#define cmb12 0x47B
#define cmb13 0x47C
#define cmb14 0x47D
#define cmb15 0x47E
#define cmb16 0x47F

from windows.h:

#define cmb1 0x470
#define cmb2 0x471
#define cmb3 0x472
#define cmb4 0x473
#define cmb5 0x474
#define cmb6 0x475
#define cmb7 0x476
#define cmb8 0x477
#define cmb9 0x478
#define cmb10 0x479
#define cmb11 0x47A
#define cmb12 0x47B
#define cmb13 0x47C
#define cmb14 0x47D
#define cmb15 0x47E
#define cmb16 0x47F
白馒头 2024-12-10 05:03:36

cmb1 可以是 windows.h 中定义的宏。如果宏将自身扩展为表达式,编译器会看到

namespace <the_expanded_expression> {
}

cmb1 may be a macro defined in windows.h. If the macro expands itself to an expression, the compiler sees

namespace <the_expanded_expression> {
}
老旧海报 2024-12-10 05:03:36

常量 cmb1 中定义如下:

#define cmb1 0x0470

如果您使用的是 Visual Studio 2010,则可以将鼠标悬停在 cmb1 下的红色波浪箭头上 查看定义。

不用说,namespace 0x0470 { } 不是有效的命名空间声明。

The constant cmb1 is defined in <windows.h> as follows:

#define cmb1 0x0470

If you are using Visual Studio 2010, you can hover over the red squiggly arrow under cmb1 to see the definition.

Needless to say, namespace 0x0470 { } is not a valid namespace declaration.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文