2015-12-10 13 views
7

Sto lavorando con un vecchio codice C++ che, apparentemente, pre-data la standardizzazione e passa da iostream.h a iostream, e allo stesso modo per altri include. Di conseguenza, la mia versione relativamente moderna di g ++ non riesce quando si cerca di #include <iostream.h>, eccÈ possibile modificare # include nomi di file usando #define?

io sono curioso di sapere se è possibile utilizzare il preprocessore per modificare le istanze di iostream.h a poco iostream, tramite la riga di comando. Ho provato ad aggiungere -Diostream.h=iostream a g ++, ma ciò non sembra alterare le istruzioni di inclusione.

Suppongo che non sia possibile per il preprocessore modificare le istruzioni di inclusione?

+1

Non sarà uno script semplice nel tuo linguaggio di scripting preferito, fare meglio? – StoryTeller

+4

Perché non creare semplicemente il codice, ottenere molti errori, correggere quegli errori e così via? Certo il codice non può più essere costruito dai vecchi compilatori pre-standard, ma almeno sarà possibile continuare a utilizzare i moderni compilatori ora e in futuro. –

+1

Basta fare una ricerca globale e sostituirla. Dovrai fare anche altre correzioni, come aggiungere 'using namespace std;' o qualifiche appropriate. Alcuni di questi possono essere automatizzati, alcuni dei quali non possono, davvero. –

risposta

8

Esistono tre forme dell'istruzione #include.

# include "h-char-sequence" new-line 

# include <h-char-sequence> new-line 

# include pp-tokens new-line 

dove pp-tokens deve espandersi a una delle prime due forme.

Si potrebbe utilizzare:

#include IOSTREAM 

e compilare con -DIOSTREAM="<iostream>" o -DIOSTREAM="<iostream.h>" a seconda della versione del compilatore si sta lavorando.

Tuttavia, non è possibile utilizzare

#include <iostream.h> 

e compilare con -Diostream.h=iostream.

Ci sono un paio di problemi con questo.

  1. iostream.h non è una macro di preprocessore valida.
  2. Il modulo dell'istruzione #include non è appropriato per l'espansione macro.

Se si è pronti a migrare il codice base per utilizzare le nuove intestazioni C++, sarà preferibile utilizzare il metodo di script preferito per modificare tutti gli intestazioni C++ di vecchio stile in nuove intestazioni C++.

Problemi correlati