Аргумент в разделе комментариев этого ответа побудил меня задать этот вопрос.
В следующем коде bar
указывает на массив переменной длины, поэтому sizeof
определяется во время выполнения вместо времени компиляции.
int foo = 100;
double (*bar)[foo];
Аргумент состоял в том, оценивает ли его операнд sizeof
, когда операнд является массивом переменной длины, делая sizeof(*bar)
undefined поведение, когда bar
не инициализируется.
Используется ли undefined поведение sizeof(*bar)
, потому что я разыменовываю неинициализированный указатель? Является ли операнд sizeof
фактически оцененным, когда тип является массивом переменной длины или он просто определяет его тип (как обычно работает sizeof
)?
Изменить: Кажется, что все цитируют этот отрывок из проекта C11. Кто-нибудь знает, если это формулировка в официальном стандарте?