Perché non possiamo dichiarare "extern C" per macro C ++?

2

Sono nuovo di C / C ++. Volevo sapere perché non possiamo dichiarare "extern C" per macro C ++ simile a metodi / funzioni ... che consentirà alle macro definite nel file C ++ di accedere ai file .c.

Grazie in anticipo

    
posta Gana 22.04.2013 - 15:02
fonte

2 risposte

9

Le macro in C e C ++ sono un meccanismo di sostituzione del testo. Per questo motivo, non è possibile definire una macro in un file sorgente e utilizzarla in un file sorgente diverso.

Quello che puoi fare è definire una macro in un file di intestazione e includere quell'intestazione in entrambi i file sorgente C e C ++ in cui vuoi usare quella macro. Tale intestazione dovrebbe contenere solo il codice proveniente dal sottoinsieme comune di C e C ++, quindi sarà accettabile in entrambe le lingue.

    
risposta data 22.04.2013 - 15:09
fonte
1

In generale, non dovresti usare le macro in C ++. Il motivo principale è che le macro non rispettano l'ambito. Semplicemente rilasciano una porzione di codice nel mezzo del file sorgente. Questo può causare tutti i tipi di bug, che saranno molto difficili da trovare, perché dovresti fare questo inserimento strutturale nella tua testa.

In C ++, se il costo di una chiamata di funzione è il collo di bottiglia delle prestazioni, dovresti utilizzare le funzioni inline , che rispettano l'ambito, anziché le macro.

Se hai bisogno di condividere il codice tra C ++ e C, probabilmente dovresti scrivere una funzione C corretta e dichiararla come extern "C" . Se devi essere in grado di chiamare il codice C ++ da C, dovresti scrivere su di esso una funzione wrapper C molto sottile.

IMHO, la cosa più semplice da fare è usare semplicemente C ++. L'unica ragione per usare C sarebbe se stai lavorando su una piattaforma embedded, che non ha un compilatore C ++.

    
risposta data 22.04.2013 - 17:18
fonte

Leggi altre domande sui tag