Machen Klammern einen Unterschied bei der Bestimmung der Größe eines Arrays?

Das folgende Programm gibt dieselbe Nummer zweimal auf gcc 4.8.2 aus:

#include <stdio.h>

int main()
{
    char a[13];
    printf("sizeof a  is %zu\n", sizeof a );
    printf("sizeof(a) is %zu\n", sizeof(a));
}

Gemäßdieser reddit Beitrag, gcc ist in dieser Hinsicht nicht standardkonform, da ein Ausdruck in Klammern nicht in der Liste der Ausnahmen enthalten ist, wenn kein Array-zu-Zeiger-Zerfall auftritt.

Ist dieser Kerl richtig? Hier ist das relevante Standardangebot:

Außer wenn es der Operand des @ isizeof Operator oder der unäre& -Operator oder ist ein Zeichenkettenliteral, das zum Initialisieren eines Arrays des Zeichentyps verwendet wird, oder ist ein breites Zeichenkettenliteral, das zum Initialisieren eines Arrays mit einem mit @ kompatiblen Elementtyp verwendet wirwchar_t, ein Wert vom Typ 'Array vom Typ' wird in einen Ausdruck vom Typ 'Zeiger auf Typ' konvertiert, der auf das ursprüngliche Element des Array-Objekts zeigt und kein Wert ist.

Nur um klar zu sein, argumentiert er, dass(a) sollte einen Array-zu-Zeiger-Zerfall auslösen, da Klammern in der obigen Liste nicht enthalten sind sizeof operator, unary& Operator, String-Literal als Initialisierer).

Antworten auf die Frage(4)

Ihre Antwort auf die Frage