2009-05-11 15 views
15

Acabo de encontrar un código que usa puntos y comas excesivamente, o uso el punto y coma para fines diferentes que no conozco.Punto y coma en los extremos de sentencias if y funciones en C

Encontré punto y coma al final de las sentencias if y al final de las funciones. Por ejemplo:

int main (int argc, char * argv[]) { 
    // some code 

    if (x == NULL) { 
     // some code 
    }; <----- 

    // more code 

    return 0; 
}; <--- 

Está compilando con cc, no gcc. ¿Qué hacen esos puntos y comas? Supongo que no hay diferencia porque el compilador simplemente lo consideraría como una declaración vacía.

+2

El punto y coma después del final de la función es completamente erróneo. Si 'cc' lo está aceptando, debe tratarlo como una especie de declaración global vacía, pero es completamente falso. El otro punto y coma se ha explicado bien. –

+0

'gcc' advertirá sobre el punto y coma al final si usa el indicador '-pedantic'. 'cc' depende de su plataforma, pero a menudo es simplemente un enlace suave a 'gcc', por lo que es posible que desee probarlo o echar un vistazo a 'man cc'. –

Respuesta

30

No hacen nada. Son una señal de alguien que no entiende el idioma terriblemente bien, sospecho.

Si este es el código fuente que teóricamente "es suyo", eliminaría el código y trataría de mantener una conversación amable con la persona que lo escribió.

+5

Solíamos ver esto hace bastantes años cuando teníamos un equipo de programadores pasando de Turbo Pascal a C. En Pascal, necesita el punto y coma después de 'Fin' en la mayoría de las circunstancias, y los programadores incorrectamente trajeron el semi -colon con ellos. Una vez que se forma el hábito, se adhiere. –

7

eso es dummy statememt. Su muestra es idéntica a

if (x == NULL) { 
// some code 
do_something_here(); 
} 

/* empty (dummy statement) here */ ; 

// more code 
some_other_code_here(); 
+0

Has dado un mejor ejemplo de lo que creías. "// algún código" debería estar "// vacío aquí" porque está vacío y porque 0 sentencias ficticias son tan válidas legalmente como 1 declaración ficticia. –

+0

Estoy siguiendo su ejemplo, por eso hay "algún código", debe tener algo en su código real. – Francis

5

Tiene razón, el compilador las considera declaraciones vacías. No son necesarios, supongo que el programador de alguna manera pensó que lo eran.

1

Estos puntos y comas no son necesarios (como dijiste, son declaraciones vacías). Su código se compila con gcc, siempre que se defina 'x' (marque http://www.codepad.org). No hay ninguna razón por la cual un compilador de C se rehusaría a compilar su código.

2

El primer punto y coma (después del enunciado if) es solo una expresión vacía que no hace nada. No veo ningún punto de tenerlo allí.

El segundo punto y coma (después de la función) es un error ya que está fuera de cualquier bloque de código. El compilador debería dar una advertencia.

+0

No. Sin advertencia con cc. Es por eso que pensé que este fragmento de código es extraño. Tal vez si ejecuto esto a través de pelusa, arrojaría error/advertencias. – codingbear

+0

Pensé que el estándar C permitía declaraciones externas sin contenido. En otras palabras, extraño pero legalmente extraño. Tal vez sea mejor que vuelva a verificar. –

+0

Programador de Windows, es C++ que permite un punto y coma opcional después de una definición de función miembro. Pero ni C ni C++ les permiten aparecer después de una definición de función normal, que yo sepa –

0

creo que el autor puede haber estado pasando por algo así como:

if(condition for tbd block) 
    ; 
else { 
    //Some code here 
} 

que podría hacer si estuviera andamios código y todavía quería que se compile. Sin embargo, hay una gran probabilidad de que sea solo un error, como sugiere Jon.

0

Estos puntos y comas son inútiles, como otros ya han señalado. Lo único que quiero agregar es que IMO, estos están optimizados de todos modos, es decir, el compilador no genera ningún código real para estos.