2010-11-18 15 views
30

Mam zewnętrzny plik .cpp. Jest to mieszanka kodu zgodnego z C i trochę C++. Kod C++ jest tylko opakowaniem wokół C, aby skorzystać z funkcji C++.Wymuszanie gcc do kompilowania pliku .cpp jako C

Używa makr, aby chronić kod C++, co jest świetne. Niestety, jeśli próbuję skompilować używając gcc, traktuje to jako C++ z powodu zakończenia pliku. Jestem świadomy różnic między gcc i g ++ - nie chcę kompilować jako C++.

Czy jest jakiś sposób zmusić gcc do traktowania tego pliku jako pliku C? Próbowałem użyć np. --std=c99, ale to poprawnie powoduje błąd, że C99 nie jest poprawne dla C++.

Zmiana nazwy pliku na .c działa, ale chciałbym tego uniknąć, jeśli jest to możliwe, ponieważ jest dostarczany z zewnątrz i byłoby miło, gdyby pozostał jako nienaruszona kopia.

Dzięki!

+0

Czasami, gdy widzę pytania SO. Chcę tylko krzyczeć na duży RTFM !! 'man gcc'. Dla tego króla pytań zajmuje to naprawdę mniej czasu niż napisanie pytania. – log0

+17

Miałem ten sam problem, ponieważ chciałem skompilować czysty kod C w pliku .cpp ... oczywiście jestem całkiem początkującym programistą dotyczącym C. RTFM! nie jest wtedy tak dobrą radą. Strony man gcc to 11.000 linii i trudno znaleźć tam rozwiązanie, jeśli nie wiesz, czego szukać. – mort

Odpowiedz

51

Opcja gcc -x umożliwia określenie języka dla wszystkich plików wejściowych po nim:

$ gcc -x c your-file-name.cpp 

Jeśli chcesz tylko do specjalnego literami, że jeden plik, można użyć -x none odcięcie specjalnego traktowania :

$ gcc -x c your-filename.cpp -x none other-file-name.cpp 

(your-filename.cpp będą kompilowane jak C, natomiast other-file-name.cpp użyje rozszerzenia i skompilować jak C++)

+1

Jak krępujące, musiałem mieć stronicowane tuż obok niego! Dziękuję bardzo, tak samo wszystkim, którzy odpowiedzieli. – ralight

10

Aby skompilować foo.cpp jako plik C, można utworzyć nowy plik o nazwie foo.c i umieścić następujące jak całe jego zawartość:

#include "foo.cpp" 

Teraz skompilować foo.c zamiast foo.cpp.

Wykorzystaliśmy to, aby przejść w drugą stronę (skompilować plik .c jako C++) w celu rozpoczęcia korzystania z funkcji C++ w niektórych plikach przy zachowaniu ich dziesięcioletniej historii CVS. Budujemy również przy użyciu natywnego kompilatora każdej platformy, nie tylko GCC, więc nie musieliśmy znaleźć równoważnego polecenia dla kilku kompilatorów, a następnie skłonić nasz system kompilacji zastosować to polecenie tylko do niektórych plików.

+0

Moim zdaniem to najpiękniejsze i najszybsze rozwiązanie. – Mischo5500

Powiązane problemy