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

时间:2011-09-07 18:19:10

标签: c++ windows namespaces

当我尝试编译此代码时:

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

但编译仍然失败。

发生了什么事?

3 个答案:

答案 0 :(得分:4)

来自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

答案 1 :(得分:3)

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

namespace <the_expanded_expression> {
}

答案 2 :(得分:2)

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

#define cmb1 0x0470

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

毋庸置疑,namespace 0x0470 { }不是有效的名称空间声明。