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!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++)
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.
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