2010-11-18 18 views
30

olarak derlemesini zorlama Harici olarak sağlanan bir .cpp dosyam var. C uyumlu kod ve biraz da C++ karışımıdır. C++ kodu, C++ özelliklerinden yararlanmak için C'nin etrafındaki sarıcıdır.gcc'nin .cpp dosyasını C

Bu, C++ kodunu korumak için #ifdef __cplusplus makrolarını kullanır. Ne yazık ki, eğer gcc kullanarak derlemeye çalışırsam, dosya sonu nedeniyle C++ olarak davranır. Gcc ve g ++ arasındaki farkların farkındayım - C++ olarak derlemek istemiyorum.

Bu dosyayı bir C dosyası olarak işlemek için gcc'yi zorlayabilmemin bir yolu var mı? Ör. --std=c99, ancak bu doğru C99 C++ için geçerli değil hatası üretir.

Dosyayı .c çalışacak şekilde yeniden adlandırıyorum, ancak eğer mümkünse dışarıdan temin edildiği için bunu önlemek istiyorum ve bozulmamış bir kopya olarak kalması güzel olurdu.

Teşekkürler!

+0

Bazen SO soruları gördüğümde. Sadece büyük bir RTFM çığlık atmak istiyorum! Adam gcc. Bu soru kralı için, aslında soruyu yazmaktan daha az zaman alır. – log0

+17

Aynı sorun vardı çünkü bir .cpp dosyası içinde saf C kodu derlemek istedim ... tabii ki, ben kesinlikle, RTFM ile ilgili yeni başlayan biriyim! o zaman o kadar iyi bir tavsiye değildir. gcc man sayfaları 11.000 satırdır ve neye bakacağınızı bilmiyorsanız, oraya bir çözüm bulmak zordur. – mort

cevap

51

gcc için -x seçenek, onu takip tüm giriş dosyalarının dilini belirtmenizi sağlar:

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

Eğer sadece bir dosya, özel muamele kapatmak için -x none kullanabileceği özel durum istiyorsanız :

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

(other-file-name.cpp uzantısını kullanma ve C derleme ise your-filename.cpp, C derlenir ++)

+1

Ne kadar utanç verici, hemen onu geçmişe sahip olmalıyım! Çok teşekkür ederim, cevap veren herkes için aynı. – ralight

10

Eğer foo.c adlı yeni bir dosya oluşturabilir, C dosyası olarak foo.cpp derlemek ve tüm içeriğini aşağıdaki koymak için: Şimdi foo.c derlemek yerine

#include "foo.cpp" 

foo.cpp.

On yıl uzunluğunda CVS geçmişini korurken bazı dosyalarda C++ özelliklerini kullanmaya başlamak için başka bir yolla (.c dosyasını C++ olarak derlemek için) bunu kullandık. Ayrıca, yalnızca GCC'yi değil, her platformun yerel derleyicisini kullanarak oluşturuyoruz. Bu nedenle, yarım düzine derleyiciler için -x eşdeğer komutunu bulmak zorunda kalmadık ve sonra da yapı sistemimizi bu komutu yalnızca belirli dosyalara uygulatabilmelerini sağladık.

+0

Bence cazibeli ve en hızlı belirtilen çözüm olarak çalışır düşünüyorum. – Mischo5500

İlgili konular