编译器警告(等级 4)C4841

使用的非标准扩展:offsetof 中使用的复合成员指示符

备注

如果使用 offsetof(T, m),其中 m 是复合成员指示符,则在使用 /Wall 选项进行编译时,编译器会生成警告。

此警告是 Visual Studio 2017 版本 15.3 中的新增功能,默认情况下处于关闭状态。 使用 /Wall 启用默认关闭的所有警告,或者使用 /w14841 启用 C4841 作为 1 级警告。 有关详细信息,请参阅默认关闭的编译器警告。 有关如何按编译器版本禁用警告的信息,请参阅由编译器版本引发的编译器警告

示例

下面的代码格式错误,可能会导致运行时发生故障:

struct A {
   int arr[10];
};

// warning C4841: non-standard extension used: compound member designator in offsetof
constexpr auto off = offsetof(A, arr[2]);

若要解决此问题,请将代码更改为不将 offsetof 与复合成员指示符一起使用。