Visual Studio sizeof() IntelliSense 与编译时的区别

Visual Studio sizeof() difference IntelliSense vs. compile-time

我的代码如下所示:

#include <stdio.h>

#pragma pack(1)
class MyClass
{
  bool a;
  bool b;
  int c;
  char d[3];
  bool e[4];
};
#pragma pack()

int main()
{
  printf("sizeof(MyClass)=%d\n", sizeof(MyClass));
  return 0;
}

输出为:

sizeof(MyClass)=13

但是当我 "hover" 超过 sizeof(MyClass) 我得到:

这本来不是什么大问题,但我正在尝试实施编译时断言,但它不起作用(出现红色下划线):

有人知道如何解决这个问题吗?

这不是编译时和运行-时的区别;这是你的编译器和你的 IDE 的 "intellisense" 之间的区别,后者似乎不是 support/recognise #pragma pack 指令。

忽略它。尺码是13.

由于您可以实际构建您的程序,您知道编译时断言成功,尽管 "red line"。

可能值得在该断言之前添加评论,解释 Visual Studio 2015 的用户将在他们的 IDE 中看到以下断言的假阴性。

您可能还希望在 Microsoft Connect 上提出一个错误,如果还没有的话。