sizeof(foo)
действительно пытается обнаружить размер выражения во время компиляции:
6.5.3.4:
Оператор sizeof дает размер (в байтах) ) его операнда, который может быть выражением или заключенным в скобки именем типа. Размер определяется по типу операнда. Результат - целое число. Если тип операнда - тип массива переменной длины, то операнд оценивается; в противном случае операнд не оценивается, а результат является целочисленной константой.
blockquote>Короче: массивы переменной длины, выполняемые во время выполнения. (Примечание: Массивы переменной длины - это определенная функция - не массивы, выделенные с помощью
malloc(3)
.) В противном случае вычисляется только тип выражения и что при компиляции время.