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