2012-08-04 13 views
6

sto cercando di compilare questo codice C++:C++ - errore di sintassi C2144: 'int' dovrebbe essere preceduto da ';'

#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; 
    } 
} 

Ma sto ottenendo l'errore "C2144: syntax error : 'int' should be preceded by ';'" E non riesco a capire il motivo per cui, #define non ha bisogno ';' alla fine.

ides?

+9

Sembra che tu abbia qualcosa in 'helper_functions.h' che dovrebbe terminare con un punto e virgola, ma non lo fa. –

+0

Non necessariamente deve essere a causa di define, ma potrebbe anche essere causa di qualcosa nel file di intestazione, come una struct, o una classe, che non hai chiuso correttamente. Controlla anche le intestazioni personalizzate e pubblica il loro contenuto, se non riesci a trovarlo lì. – ATaylor

+1

Dopo aver corretto l'intestazione, quindi * sostituisci '# define' * con una definizione costante C++, sostituisci l'uso di matrici' char' grezze con 'std :: string', e sprikle un generoso aiuto di' const' all oltre il posto. –

risposta

9

In primo luogo, il codice che hai pubblicato inizia con un backtick randagio. Se questo è veramente nel tuo codice, dovresti rimuoverlo.

In secondo luogo, il compilatore sarebbe più felice, ed emettere un minor numero di avvisi, se si è conclusa la funzione con la linea

return 0; // unreachable 

Questo è un bene C++ stile ed è consigliato. (Nel tuo caso, la linea può effettivamente essere raggiungibile, nel qual caso la linea non è solo buono stile, ma necessaria per il corretto funzionamento. Controllare questo.)

In caso contrario, il codice sia tutto a posto tranne che per alcune piccole obiezioni si potrebbe sollevare per quanto riguarda l'uso obsoleto in stile C di #define e per quanto riguarda uno o due altri punti di stile minori. Per quanto riguarda lo #define, non è il codice sorgente C++ in quanto tale ma è una direttiva preprocessore . In realtà è gestito da un programma diverso dal compilatore, e viene rimosso e sostituito da un codice C++ corretto prima che il compilatore lo veda. Il preprocessore non è interessato al punto e virgola. Questo è il motivo per cui la linea #define non termina con un punto e virgola. Nemmeno le altre righe che iniziano con # terminano di punto in virgola.

Come ha notato @JoachimIsaksson, potrebbe mancare un punto e virgola necessario alla fine del file general_configuration.h o il file helper_function.h. Dovresti controllare l'ultima riga in ogni file.

+0

hai ragione, a; mancava sul file h. Grazie – judith

1

E non riesco a capire perché, #define non ha bisogno ';' alla fine.

Perché #define non è una dichiarazione, ma una direttiva preprocessore, e il preprocessore è orientato alla linea quando si tratta di separare le direttive. Ad esempio, non puoi mettere due #definiti sulla stessa linea.

5

Ho riscontrato questo problema. Ho scritto un file di intestazione, ma ho dimenticato di aggiungere ";" alla coda di un delartion di funzione. Quindi, c'è un errore nel mio file c che include questo file di intestazione. Aggiungo un commento qui e spero che possa essere utile a qualcuno.

Problemi correlati