LLVM上奇怪的__COUNTER__行为

时间:2014-03-14 12:34:29

标签: c++ xcode c++11 c-preprocessor llvm

我正在试图了解可能导致此问题的原因,因为一切似乎都很好,但结果似乎指出了某种错误的行为。

我有一个自定义结构定义为:

struct MyStruct {
  const u16 index;
  ...

  MyStruct(u16 index) : index(index), ... { }
}

static const MyStruct array[] = {
 MyStruct(__COUNTER__,...),
 MyStruct(__COUNTER__,...),
 MyStruct(__COUNTER__,...)
 ...
}

现在,如果我使用XCode检查预处理文件,一切都很好,我会得到应有的增量索引。

在运行时,相反,发生的是索引16变为23并且连续索引降低1,例如:

real index         stored index

0                   0
1                   1
2                   2
3                   3
4                   4
5                   5
6                   6
7                   7
8                   8
9                   9
10                  10
11                  11
12                  12
13                  13
14                  14
15                  15
16                  23
17                  16
18                  17
19                  18
20                  19

这很奇怪,特别是因为16似乎是一个特定的界限。编译器是Apple Clang 4.2(基于LLVM 3.2),在XCode 4.6上。

0 个答案:

没有答案