2012-08-30 15 views
5

Citando de la norma C11:sobre el operador array subscripting

matriz subsripting (§ 6.5.2.1)

La definición del operador subíndice [] es que E1[E2] es idéntica a (*((E1)+(E2))).

me gustaría saber por qué son los corchetes de E1 necesaria (que se estaban perdiendo en la norma C89), es decir en el que la expresión puede ser diferente de (*(E1+(E2)))(*((E1)+(E2)))?

+0

Mi única conjetura es que el primero significa que E2 se evalúa antes que E1. Este último no da prioridad y los paréntesis están anidados por igual. No tengo idea por qué. –

+8

No escribí esa línea, o ninguna línea en el estándar, pero mi GUESS es que "E1" y "E2" son expresiones, y solo querían enfatizar que E1 se evalúa completamente incluso cuando básicamente " cópiala y pégala en la descripción. –

+0

Estoy totalmente de acuerdo con @ChristianStieber. Además, debe tener en cuenta que '+' y '[]' tienen prioridades diferentes, de modo que si 'E1' es una expresión, podría vincularse de manera diferente al' + 'detrás. –

Respuesta

9

De acuerdo con http://www.open-std.org/jtc1/sc22/wg14/www/docs/n841.htm, se inserta solo para mayor claridad. Las dos expresiones son sintácticamente equivalentes.

comentario público número PC-UK0103
comentario 1.
Categoría: Cambio de redacción/contribución no normativa
Comité Proyecto de la subsección: 6.3.2.1
Título: Array ejemplo subscripting
Descripción detallada:

El párrafo 2 debe reemplazar "(*(E1+(E2)))" por "(*((E1)+(E2)))", para evitar confusión. Sí, sé que el gráfico sintáctico hace que sea bastante inequívoco, pero la redacción actual en el párrafo 2 es muy confusa.

Cuestiones relacionadas