Neden basit bir "Hello World" tarzı program Turbo C ++ ile derlenmiyor?


101

Programlama sınıfım için C ++ öğrenmeye başladım. Bu "Merhaba Dünya" programını indirdim:

#include <iostream>
using namespace std;

int main() 
{
    cout << "Hello, World!";
    return 0;
}

ancak Turbo C ++ şikayet ediyor:

Error D:\HELLO.CPP 1: Unable to open include file 'IOSTREAM'
Error D:\HELLO.CPP 2: Declaration syntax error
Error D:\HELLO.CPP 6: Undefined symbol 'cout'

Bu çok basit programın nesi yanlış? Bu hataları nasıl düzeltebilirim?


39
Bu, Turbo C ++ sorunları hakkında sorulan sorular için standart bir çift yeniden yönlendirme olarak tasarlanmıştır. Bu soruların çoğu, yorumlarda sadece kısa bir açıklama ile hızlı bir şekilde düşürülme eğilimindeyken, gerçekten uygun bir cevap kullanabilirler. İyileştirmelere açığız.
n. zamirler 'm.

6
hangi Turbo C ++ sürümünü kullandığınızı belirtmenizi öneririz. 2006 versiyonu bu programla başa çıktı.
MM

5
"Programlama sınıfım için C ++ öğrenmeye başladım." Bu bir yalan. Dönem.
bugwheels94

5
@ bugwheels94 Şuna bakın .
n. zamirler 'm.

5
bugwheells bu demek olmadığını bilmiyorum @nm ama bir öğretilir eğer anlamına götürdü TurboC ++ , o zaman onlar öğrenme değildir (bu derlenmeyecektir özellikle eski TurboC ++) ile C ++ (ki çoğu kişi, beni dahil , dolaylı olarak standart C ++ anlamına geldiğini varsayar ).
eerorika

Yanıtlar:


158

Bu programla ilgili bir sorun yok. (Muhtemelen bazı üslup sorunları dışında - using namespace stdtavsiye edilmez). Sorun Turbo C ++ ile. Bu çok eski bir yazılım parçasıdır. Bu milenyumun başında tamamen kullanım dışı kalmış olan ANSI öncesi C ++ denen bir C ++ lehçesi uygular . C ++ için ilk ANSI standardı 1998'de yayınlandı, ardından 2003 sürümü, 2011 sürümü, 2014 sürümü, 2017 sürümü vardı ve şimdi 2020 sürümünün resmi olarak yayınlanmasını bekliyoruz. Bu standart revizyonların her biri, dilde az çok önemli değişiklikler getirdi.

Turbo C ++ için programı şu şekilde değiştirmeniz gerekir:

#include <iostream.h>      // note the .h suffix
// using namespace std;    // Turbo C++ doesn't implement namespaces

int main() 
{
    cout << "Hello, World!";
    return 0;
}

Bu programa bakarsanız, modern C ++ lehçesi ile Turbo C ++ tarafından kabul edilen ağ arasındaki fark küçük görünebilir. Ancak, programlarınız daha karmaşık hale geldikçe daha da büyüyecektir.

Turbo C ++ kullanarak programlamayı öğrenebilirsiniz, ancak aşağıdaki sorunlar nedeniyle insanca mümkünse bundan kaçınmanızı şiddetle tavsiye ederim:

  1. Endüstride kullanılan popüler bir dile biraz benzeyen, ancak yine de çok farklı, iyi bir neden olmaksızın öğreneceksiniz. Gerçek yazılım geliştirme için C ++ yazmayı planlıyorsanız, yeniden öğrenmeniz gerekecek. Hemen modern C ++ öğrenmek çok daha kolay.
  2. Turbo C ++ ile ilgili mevcut literatür yok. İnternette veya kitaplarda bulacağınız C ++ materyalinin neredeyse% 100'ü, kutudan çıkar çıkmaz doğrudan Turbo C ++ için geçerli değildir. Bazılarının yalnızca küçük bir adaptasyona ihtiyacı olurken, diğer materyaller tamamen kullanılamaz. Hemen kullanabileceğiniz tek yardım kaynağı, yerleşik Turbo C ++ yardımıdır.
  3. Çok az insan Turbo C ++ 'yı hatırlar. Forumlarda soru sorarken, dilin modern versiyonuna yönelik yanıtları filtrelemek için her zaman bir ANSI öncesi lehçesi kullandığınızı belirtin. Muhtemelen hemen durmanızı ve sorduğunuz her soruyla modern bir derleyiciye geçmenizi öneren bir dizi yorum alacaksınız.

Turbo C ++ yerine kullanabileceğiniz pek çok modern ücretsiz ( birada ve konuşmada olduğu gibi ) derleyici ve IDE'ler vardır. Bunlardan bazıları şunları içerir:

  1. Visual C ++ Community Edition , bir IDE ve Microsoft'tan bir derleyicidir
  2. Code :: Blocks hafif bir IDE'dir. Windows'ta biraz eski bir derleyiciyle birlikte gelir, ancak kendiniz daha modern bir derleyici kurabilirsiniz.
  3. Eclipse CDT , platformlar arası güçlü bir IDE'dir. Kendi derleyicisiyle birlikte gönderilmez, bu nedenle ayrı bir derleyici kurmanız gerekir. Windows'ta, örneğin MinGW kullanın .
  4. Çok daha fazlası
  5. Buna ek olarak, gibi birçok çevrimiçi derleyiciler vardır http://ideone.com , https://www.onlinegdb.com/ ve http://coliru.stacked-crooked.com/ artı bunun gibi pek çok (bunlar çoğunlukla iyi fikirleri denemek ve çok küçük programlar yazmak için).
  6. Hem Clang / LLVM hem de GCC , son C ++ sürümlerini destekleyen ücretsiz yazılım derleyicileridir.

Ne yazık ki, bazı okullar / öğretmenler bu gün ve yaşta bile öğrencileri Turbo C ++ kullanmaya zorluyor. Maalesef bu, bu topluluğun düzeltebileceği bir şey değil. Kendinizi bu durumda bulursanız, dışarıdan çok fazla yardım alamamaya hazırlanın.


7
@ Rakete1111 Bence bu daha çok "Bu program mevcut standarda göre sorun içermiyor." İyi bir programlama stili olup olmadığı başka bir şeydir.
Hatted Rooster

21
@ Rakete1111 sorumlu kullanımda yanlış bir şey yok using namespace std. Yeni programcılara öğretmek iyi bir pedagojik karar olabilir veya olmayabilir, ancak ahlaki olarak yanlış değildir.
n. zamirler 'm.

10
Bunun using namespace stdkötü bir uygulama olduğuna katılıyorum , ancak bunun bu soruya ait olduğunu düşünüyorum, çünkü çevrimiçi bulduğunuz C ++ merhaba dünya programları neredeyse her zaman yapıyor. Bu yüzden, Turbo C ++ 'yı mutsuz yapan şeyin bu olmadığını açıklığa kavuşturmak önemlidir. Belki "Bu programla ilgili bir sorun yok" yerine "Bu program geçerli C ++ standardına göre geçerlidir ; derlemesi gerekir."
zwol

5
@ Puppy aynı belirteçle, standart işlevlere yapılan tüm çağrılar sorumsuzdur, çünkü hangi yeni aşırı yüklemelerin ekleneceğini bilmiyorsunuz. Ayrıca bir sonraki standartta hangi dil özelliklerinin ortadan kalkacağını veya anlam değiştireceğini bilmiyorsunuz. Tüm programların onlarca yıl yaşaması veya rastgele derleyiciler için taşınabilir olması gerekmez.
n. zamirler 'm.

6
"Turbo C ++ ' ı hatırlayan çok az insan" Katılmıyorum. Bugün en az bir bütün, büyük ülke aktif olarak öğretiliyor .
Orbit'te Hafiflik Yarışları

11

"Turbo C ++" çok sayıda derleyici anlamına gelebilir. Bu soruyu sorarken, sürüm numarasını eklemek önemlidir.

  • Borland Turbo C ++ 3.1 sürümüne kadar, klasik mavi arka plan IDE'sinde saf MS DOS derleyicileriydi. Bunlar kabaca 1989 ile 1992 yılları arasında, 1998 yılında C ++ 'nın standart hale gelmesinden çok önce piyasaya sürüldü. Ve bu nedenle, C ++' ın ön standart lehçesini kullandılar.

    En önemlisi #include <iostream.h>, standart yerine sözdizimini kullandılar #include <iostream>, ancak ad alanları, şablonlar vb. Gibi birçok C ++ özelliğini de kapsamadılar. STL şablon kitaplığı henüz standardın bir parçası değildi, bu nedenle bu kitaplıkla ilgili her şey güzeldi daha sonra standart hale gelenlerden farklı.

  • 90'ların sonlarında, Borland daha iyi uyum sağlayan birkaç DOS / Windows derleyicisi yayınladı. Bir yerlerde sürüm 5'e kadar, bu Windows sürümleri oldukça yakın olmasına rağmen, yine de C ++ 98'e tam uyum sağlamak için mücadele ettiler.

  • 90'ların sonlarında, Borland C ++ Builder lehine "Turbo C ++" adını bıraktılar, bu sadece bir IDE değil, aynı zamanda Delphi'ye dayalı tam bir RAD aracıydı. Bu derleyiciler, C ++ 98 ve daha sonra C ++ 03 ile tamamen uyumludur.

  • 2005 yılı civarında Borland, ürün yelpazesinin bir parçası olarak derleyicileri bıraktı. Derleyiciler, daha sonra Embarcadero olan "Codegear" oldu. O sıralarda, Borland Builder'ın "Turbo C ++" adını verdikleri ücretsiz bir sürümünü yayınladılar. Bu sürüm C ++ 03 ile tamamen uyumludur.

  • Günümüzde bu derleyicilere Embarcadero C ++ Builder adı verilmektedir. Şu anda bazı C ++ 14 ile C ++ 11'e kadar desteklediklerine inanıyorum. Daha fazla bilgi burada.

Söylemeye gerek yok, bir öğrenci olarak modern derleyiciler dışında hiçbir şey kullanmamalısınız. 1991 yılında MS DOS derleyicilerini 2018 yılında C ++ öğrenirken kullanmak tam anlamıyla çılgınlıktır. Sadece üretkenliğe aykırı olmakla kalmaz, doğrudan zararlıdır ve sizi kötü bir C ++ programcısı yapar. Okulunuz sizi Turbo C ++ 3.1 veya daha eski bir sürümü kullanmaya zorluyorsa, o zaman okulunuz kötüdür ve öğretmenleriniz ciddi şekilde yetersizdir. Lütfen bu gönderiyi onlara ve müdürlerine bağlayın.


Turbo C ++, 2020'de Hindistan'da hala yaygındır . Daha ve daha - . Yani 40 yaşında" modası geçmiş Turbo C Hint kolej hala başka öğretme şey için ve çöpün öğretmek Bana sıfır not verdi, ben kullanıldığından std::stringyerine char *sınavlarda, bunlar C ++ standardize edilir bilmiyorum çünkü ve char *kullanımdan kaldırıldı. " .
Peter Mortensen

@PeterMortensen Evet ... C90'ı öğretmek için biraz uygundur (eğlenceli bir şekilde, bu konuda 2020'deki Visual Studio'dan daha iyidir), ancak kullandığı C ++ lehçesi sadece haywire idi.
Lundin

7

Turbo C ++ çok eski bir derleyicidir ve GNU C ++ derleyicisinden biraz farklıdır. Paylaştığınız kod GNU derleyicisiyle mükemmel bir şekilde çalışacaktır, ancak bunu Turbo C ++ ile çalıştırmak için birkaç değişiklik yapmanız gerekir:

1. Başlık dosyasının adını 2'den iostreamdeğiştirin iostream.h
. Ve "ad alanı std kullanarak" satırını kaldırın. Turbo C ++ 'da gereklidir. İşte değiştirilen kod:

#include <iostream.h>

int main() 
{
  cout << "Hello, World!";
  return 0;
}

6
Cevabınız, kabul edilenin olmadığını ekler ne?
Rakete1111

7
uzun cevapları okuyacak vakti olmayanlar için ana fikir.
Yougansh Thakur

"biraz farklı" değil ama C ++ derleyicilerinden oldukça farklı
phuclv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.