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

当我尝试编译这段代码时:

#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 { } } 

但编译仍然失败。

到底是怎么回事?

从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 

cmb1可能是一个在windows.h定义的宏。 如果宏扩展自己的表达式,编译器看到

 namespace <the_expanded_expression> { } 

常量cmb1<windows.h>定义如下:

 #define cmb1 0x0470 

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

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