Así se especifica el idioma, los nombres de tipos deben estar entre paréntesis aquí.
Supongamos que la gramática veía así:
sizeof unary-expression
sizeof type-name
Ahora, por ejemplo, la siguiente expresión sería ambigua:
sizeof int * + 0
Podría ser cualquiera o sizeof(int *) + 0
sizeof(int) * +0
. Esta ambigüedad no se presenta para expresiones unarias, ya que un asterisco agregado a una expresión no es una expresión (pero para algunos nombres de tipos, al agregar uno, nuevamente se encuentra un nombre de tipo).
Se debe especificar algo aquí y es necesario que los nombres de tipos queden entre paréntesis para resolver la ambigüedad.
sizeof como un operador de anticipación en ANSI-C – Grim
@Kostya: mi copia de K & R (la primera descripción de la lengua C que tengo) está muy lejos y yo no puedo verificarlo ahora, pero estoy 110% seguro de que describe 'sizeof' fundamentalmente de la misma manera que lo hace C99 Standard hoy en día. 'sizeof' está disponible desde antes de que C fuera estandarizado por ANSI en 1989. – pmg
Lo siento, mi mal ... – Grim