2012-08-04 9 views
6

estoy tratando de compilar este código C++:C++ - error C2144 error de sintaxis: 'int' debe ir precedido por ';'

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include "general_configuration.h" 
#include "helper_functions.h" 

#define LINE_LEN 80 

// file_with_as_ext returns 1 if the input has .as extension 
int file_with_as_ext(char* input) 
{ 
    char* dot_value = strchr(input, '.'); 
    if (dot_value == NULL) 
    return 0; 
    else 
    { 
    if (strcmp(dot_value,".as") == 0) 
     return 1; 
    } 
} 

Pero estoy consiguiendo el error "C2144: syntax error : 'int' should be preceded by ';'" Y no puedo entender por qué, #define no es necesario ';' al final.

any ides?

+9

Parece que tiene algo en 'helper_functions.h' que debería terminar con un punto y coma pero no lo hace. –

+0

No necesariamente tiene que ser debido a definir, pero también podría ser debido a algo en el archivo de encabezado, como una estructura o una clase, no se cerró correctamente. Compruebe también esos encabezados personalizados y publique su contenido, si no puede encontrarlo allí. – ATaylor

+1

Cuando haya arreglado el encabezado, entonces * reemplace el '# define' * con una definición constante de C++, reemplace el uso de matrices' char' sin procesar con 'std :: string', y agregue una generosa ayuda de' const' todo sobre el lugar. –

Respuesta

9

En primer lugar, el código que ha publicado comienza con un retroceso perdido. Si eso está realmente en tu código, debes eliminarlo.

En segundo lugar, el compilador sería más feliz, y emiten menos advertencias, si usted terminó su función con la línea

return 0; // unreachable 

Este es un buen estilo C++ y se recomienda. (En su caso, la línea puede ser en realidad alcanzable, en cuyo caso la línea no es sólo un buen estilo, pero necesaria para su correcto funcionamiento. Compruebe esto.)

lo contrario, su código es bien excepto por algunas pequeñas objeciones se podría plantear con respecto al uso obsoleto al estilo C de #define y con respecto a uno o dos puntos menores de estilo. Con respecto al #define, no es el código fuente de C++ como tal, pero es una directiva de preprocesador . En realidad, es manejado por un programa diferente que el compilador, y se elimina y reemplaza por el código correcto de C++ antes de que el compilador lo vea. El preprocesador no está interesado en punto y coma. Esta es la razón por la cual la línea #define no termina en punto y coma. Tampoco las demás líneas que comienzan en # suelen terminar en punto y coma.

Como ha observado @JoachimIsaksson, es posible que falte un punto y coma al final del archivo general_configuration.h o en el archivo helper_function.h. Debe verificar la última línea en cada archivo.

+0

tienes razón, a; faltaba en el archivo h. Gracias – judith

1

Y no puedo entender por qué, #define no necesita ';' al final.

Debido #define no es una declaración, sino una directiva de preprocesador y el preprocesador está orientado a la línea cuando se trata de la separación de las directivas. Por ejemplo, no puede poner dos #defines en la misma línea.

5

He codificado este problema. Escribí un archivo de encabezado, pero olvidé agregar ";" en la cola de una delartion de la función. Entonces, hay un error en mi archivo c que incluye este archivo de encabezado. Agregué un comentario aquí, y espero que sea útil para alguien.