VLAs and side-effect in sizeof's operand
问题 I know that sizeof never evaluates its operand, except in the specific case where said operand is a VLA. Or, I thought I knew. 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; } What is going on? Just in case, this is compiled with GCC 5.1 on Coliru. 回答1: It seems that I should think twice before posting, because it struck me right after I did. My