Zmuszanie gcc do kompilacji.plik cpp jako C

Mam dostarczony zewnętrznie .plik cpp. Jest to mieszanka kodu zgodnego z C i trochę c++, jak również. Kod C++ jest tylko owijką wokół C, aby skorzystać z funkcji C++.

Używa makr #ifdef __cplusplus do ochrony kodu C++, co jest świetne. Niestety, jeśli próbuję skompilować za pomocą gcc, traktuje to jako C++ ze względu na zakończenie pliku. Zdaję sobie sprawę z różnic pomiędzy gcc A G++ - nie chcę kompilować jako C++.

Czy Jest jakiś sposób, aby zmusić gcc do leczenia ten plik jako plik C? Próbowałem użyć np. --std=c99, ale to poprawnie powoduje błąd, że C99 nie jest poprawny dla C++.

Zmiana nazwy pliku na .C działa, ale chciałbym tego uniknąć, jeśli to możliwe, ponieważ jest dostarczany zewnętrznie i byłoby miło, aby pozostał jako nieskazitelna Kopia.

Dzięki!
Author: ralight, 2010-11-18

2 answers

Opcja -x gcc pozwala określić język wszystkich plików wejściowych następujących po niej:

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

Jeśli chcesz tylko specjalnego przypadku, że jeden plik, można użyć -x none aby wyłączyć specjalną obróbkę:

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

(your-filename.cpp będzie skompilowany jako C, podczas gdy other-file-name.cpp będzie używać rozszerzenia i kompilować jako C++)

 55
Author: Michael Mrozek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-18 15:13:27

Aby skompilować foo.cpp jako plik C, możesz utworzyć nowy plik o nazwie foo.c i umieścić jako całość:

#include "foo.cpp"

Teraz skompiluj foo.c zamiast foo.cpp .

Użyliśmy tego, aby przejść w drugą stronę (skompilować .C Plik jako C++), aby rozpocząć korzystanie z funkcji C++ w niektórych plikach, zachowując ich dziesięcioletnią historię CVS. Ponadto, budujemy przy użyciu natywnego kompilatora każdej platformy, a nie tylko GCC, więc nie musieliśmy znaleźć -x równoważne polecenie dla pół tuzina kompilatorów, a następnie sprawiają, że nasz system kompilacji stosuje to polecenie tylko do niektórych plików.

 10
Author: Rob Kennedy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-18 16:02:08