Я знаю, что sizeof
никогда не оценивает свой операнд, за исключением конкретного случая, когда указанный операнд является VLA. Или я думал, что знаю.
void g(int n) {
printf("g(%d)\n", n);
}
int main(void) {
int i = 12;
char arr[i]; // VLA
(void)sizeof *(g(1), &arr); // Prints "g(1)"
(void)sizeof (g(2), arr); // Prints nothing
return 0;
}
Что происходит?
На всякий случай, это скомпилировано с помощью GCC 5.1 на Coliru.