2013-04-24 22 views
6

ho ancora lottando per compilare un'applicazione console C, la procedura di compilazione non riesce ancora con l'errore di seguito:extern "C" Errore # 2040: atteso un identificatore

"Main.c", line 51: error #2040: expected an identifier 
    extern "C" void TreatReceivedSignal(int NoSignal) ; 
     ^
1 error detected in the compilation of "Main.c". 
gmake: *** [Main.o] Error 2 

seguito la dichiarazione del metodo extern sulla codice C:

extern "C" void TreatReceivedSignal(int NoSignal) ; 

sto usando HP-UX aCC compilatore [HP C/aC++ B3910B A.06.26], anche sono passato sulla bandiera compilation -AE per abilitare il supporto C99. Sembra che il compilatore non possa riconoscere il "extern" C "'come parola riservata C, potrebbe essere necessario impostare un altro flag di compilazione. Qualche idea per favore che possa risolvere questo tipo di problema? Grazie mille in anticipo. Saluti

+0

C e C++ non sono * * simili. Non trattarli come se lo fossero. Impara uno o impara l'altro. Non impararli contemporaneamente. Non scrivere codice C allo scopo di essere "compilabile come C++". Ci sono molte ragioni per cui questa è una cattiva idea. Scrivi in ​​C o scrivi in ​​C++. Se si desidera collegare il codice C a un progetto C++, compilare il codice C con un compilatore C e utilizzare il linker C++ per collegare il codice oggetto. – Sebivor

risposta

12

Il extern "C" costrutto è cosa specifica un C++, non può essere utilizzato in C. E il compilatore tratta il file di origine come un file sorgente C dal momento che ha l'estensione .c.

La cosa più comune per farlo è quello di utilizzare il preprocessore per aggiungere condizionalmente questo per le compilation C++:

#ifdef __cplusplus 
extern "C" { 
#endif 

/* Standard C prototypes */ 

#ifdef __cplusplus 
} 
#endif 
+0

come so che il metodo C e C++ può essere utilizzato su entrambe le lingue usando il meccanismo di collegamento – jamel

+0

@jamel Puoi usare la funzione sia da C che da C++, è la cosa "extern" C "' il compilatore si lamenta . Quel costrutto non è nel linguaggio C. –

+0

sì, non so perché è in via di compattamento, tuttavia ho compilato la stessa applicazione con una versione precedente di aCC! questa versione forse ha bisogno di qualche flag aggiuntivo da impostare durante la compilazione! – jamel

Problemi correlati