ошибка для хэш-функции пары целых

С точки зрения адвоката выражение &(((struct name *)NULL)->b); должно привести к UB, поскольку вы не смогли найти путь, в котором не было бы UB. ИМХО, первопричиной является то, что на мгновение вы применяете оператор -> к выражению, которое не указывает на объект.

С точки зрения компилятора, предполагая, что компилятор не был сложным, он ясно, что выражение возвращает то же значение, что и offsetof(name, b), и я уверен, что при условии, что он скомпилирован без ошибки , любой существующий компилятор даст этот результат.

Как написано, мы не могли обвинить компилятор, который отметил бы, что во внутренней части вы используете оператор -> для выражения, чем не можете указать на объект (поскольку он является нулевым) и выдавать предупреждение или ошибку.

Мое заключение заключается в том, что до тех пор, пока не будет специальный абзац, в котором говорится, что при условии, что он должен только принять свой адрес, это законно разыменовать нулевой указатель, это выражение не является законным C.

32
задан Rakholiya Jenish 5 April 2016 в 18:47
поделиться