コンパイラ警告 (レベル 4) C4841
非標準の拡張機能が使用されています: 複合メンバー指定子が
offsetof
で使用されています
解説
offsetof(T, m)
を使用する場合 (m
は複合メンバー指定子)、/Wall
オプションを使用してコンパイルすると、コンパイラは警告を生成します。
この警告は Visual Studio 2017 バージョン 15.3 で新たに追加されたものであり、既定では無効になっています。 既定でオフになっているすべての警告を有効にするには /Wall
を、C4841 をレベル 1 の警告として有効にするには /w14841
を使用します。 詳細については、「既定で無効になっているコンパイラ警告」を参照してください。 コンパイラのバージョン別の警告を無効にする方法は、「コンパイラのバージョン別のコンパイラの警告」を参照してください。
例
次のコードは形式が不適切であり、実行時にクラッシュが発生する可能性があります。
struct A {
int arr[10];
};
// warning C4841: non-standard extension used: compound member designator in offsetof
constexpr auto off = offsetof(A, arr[2]);
この問題を解決するには、offsetof
を複合メンバー指定子と共に使用しないようにコードを変更します。