2011-03-01 33 views
5

Busco durante un cierto código que otro había hecho y veo esto:¿Es este un comando/instrucción C válido?

  if (numDetects == 0) { 

       Table[Index].minF = 

      Table[Index].maxF = F; 

      } 

La Tabla [Índice] = .minF en blanco que no tiene ningún sentido para mí. Nunca he visto esto en mi vida. PERO el código se compila y se ejecuta, así que, ¿podría alguien explicarme si esto es posible o no simplemente dejar un letrero igual colgando allí? ¡Gracias!

Respuesta

7

Sí; C no se preocupa por el espacio en blanco entre la primera línea y la segunda, por lo que lo ve como

Table[Index].minF = Table[Index].maxF = F; 

Es sintácticamente equivalente a

Table[Index].minF = (Table[Index].maxF = F); 

desde el operador de asignación = no sólo asigna la izquierda -hand side to the right-side side, pero también devuelve el valor que se le asignó. En este caso, ese valor de retorno se asigna a su vez al lado izquierdo externo.

+1

Eso me lleva de vuelta. Un error en uno de los primeros compiladores de PC interpretó la asignación dentro() como una prueba, por lo que volvería verdadero, ¡porque la asignación se realizó! - por lo que establece minF en 1 –

1

El espacio en blanco es ignorado y todo es evaluado como ...

Table[Index].minF = Table[Index].maxF = F;

2

El espacio en blanco no es importante. La línea realmente lee

Table[Index].minF = Table[Index].maxF = F; 

lo que equivale a

int a; 
int b; 

a = b = 0; 
2

es equivalente a:

Table[Index].minF = Table[Index].maxF = F; 
6

Sí, esto es lo mismo que:

Table[Index].minF = Table[Index].maxF = F; 

la El operador de asignación (=) se puede encadenar igual que cualquier otro operador. Se evalúa de derecha a izquierda, y cada evaluación devuelve el valor que se le asignó. Entonces esto es equivalente a las siguientes dos declaraciones.

Table[Index].maxF = F; 
Table[Index].minF = Table[Index].maxF; 
Cuestiones relacionadas