Mengapa program sederhana bergaya "Hello World" dikompilasi dengan Turbo C ++?

101

Saya sudah mulai belajar C ++ untuk kelas pemrograman saya. Saya telah mendownload program "Hello World" ini:

#include <iostream>
using namespace std;

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

tapi Turbo C ++ mengeluh:

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'

Ada apa dengan program yang sangat sederhana ini? Bagaimana cara memperbaiki kesalahan ini?

n. 'kata ganti' m.
sumber
39
Ini dimaksudkan sebagai pengalihan dupe standar untuk pertanyaan yang menanyakan tentang masalah Turbo C ++. Banyak dari pertanyaan ini cenderung ditolak dengan cepat hanya dengan penjelasan singkat di komentar, sementara mereka benar-benar dapat menggunakan jawaban yang tepat. Perbaikan diterima.
n. 'kata ganti' m.
6
sarankan untuk menyebutkan rilis Turbo C ++ yang Anda gunakan. Versi 2006 mengatasi program ini.
MM
5
"Saya sudah mulai belajar C ++ untuk kelas pemrograman saya.". Ini bohong. Titik.
bugwheels94
5
@ bugwels94 Lihat ini .
n. 'kata ganti' m.
5
@nm Saya tidak tahu apakah bugwheell berarti ini, tetapi saya mengartikannya bahwa jika seseorang diajarkan TurboC ++ (khususnya, TurboC ++ lama yang gagal mengkompilasi ini), maka mereka tidak mempelajari C ++ (yang banyak orang, termasuk saya , secara implisit diasumsikan berarti standar C ++).
eerorika

Jawaban:

158

Tidak ada masalah dengan program ini. (Kecuali mungkin beberapa masalah gaya - using namespace stdtidak disarankan). Masalahnya ada pada Turbo C ++. Ini adalah perangkat lunak yang sangat tua. Ini mengimplementasikan dialek C ++, yang disebut pra-ANSI C ++ , yang telah benar-benar tidak digunakan pada awal milenium ini. Standar ANSI pertama untuk C ++ di terbitkan tahun 1998, lalu ada versi 2003, versi 2011, versi 2014, versi 2017, dan sekarang kami harapkan versi 2020 sudah resmi terbit. Setiap revisi standar ini membawa perubahan yang kurang lebih signifikan pada bahasa.

Untuk Turbo C ++ Anda harus memodifikasi program seperti ini:

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

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

Jika Anda melihat program ini, perbedaan antara dialek C ++ modern dan yang diterima oleh Turbo C ++ mungkin tampak kecil. Namun itu akan tumbuh jauh lebih besar karena program Anda akan menjadi lebih kompleks.

Meskipun Anda dapat belajar pemrograman menggunakan Turbo C ++, saya sangat menyarankan untuk menghindarinya jika memungkinkan secara manusiawi karena masalah berikut:

  1. Anda akan mempelajari bahasa yang agak mirip dengan bahasa populer yang digunakan di industri, tetapi sangat berbeda, tanpa alasan yang jelas. Jika Anda berencana untuk menulis C ++ untuk pengembangan perangkat lunak nyata, Anda harus banyak belajar kembali. Jauh lebih mudah untuk langsung mempelajari C ++ modern.
  2. Tidak ada literatur yang ada tentang Turbo C ++. Hampir 100% materi C ++ yang akan Anda temukan di internet atau di buku tidak langsung berlaku untuk Turbo C ++ di luar kotak. Beberapa hanya membutuhkan adaptasi kecil, sementara materi lainnya sama sekali tidak dapat digunakan. Hampir satu-satunya sumber bantuan yang segera tersedia untuk Anda adalah bantuan Turbo C ++ bawaan.
  3. Hanya sedikit orang yang mengingat Turbo C ++. Saat mengajukan pertanyaan di forum, selalu tentukan bahwa Anda menggunakan dialek pra-ANSI untuk menyaring tanggapan yang diarahkan ke versi bahasa modern. Anda mungkin akan mendapatkan banyak komentar yang menyarankan Anda untuk segera berhenti dan beralih ke kompiler modern dengan setiap pertanyaan yang Anda ajukan.

Ada banyak kompiler dan IDE modern gratis (seperti dalam bir , juga dalam pidato ) yang dapat Anda gunakan sebagai pengganti Turbo C ++. Beberapa di antaranya adalah:

  1. Visual C ++ Community Edition adalah IDE dan kompiler dari Microsoft
  2. Code :: Blocks adalah IDE ringan. Di Windows, ia dikirimkan dengan kompiler yang agak ketinggalan zaman, tetapi Anda dapat menginstal sendiri kompilator yang lebih modern
  3. Eclipse CDT adalah IDE lintas platform yang kuat. Itu tidak dikirimkan dengan kompilernya sendiri sehingga Anda perlu menginstal kompiler terpisah. Di Windows, gunakan misalnya MinGW .
  4. Masih banyak lagi
  5. Selain itu, ada banyak kompiler online seperti http://ideone.com , https://www.onlinegdb.com/ dan http://coliru.stacked-crooked.com/ , ditambah banyak lagi (ini sebagian besar bagus untuk mencoba ide dan menulis program yang sangat kecil).
  6. Baik Clang / LLVM dan GCC adalah kompiler perangkat lunak gratis yang mendukung C ++ versi terbaru.

Sayangnya, beberapa sekolah / guru tampaknya memaksa siswanya untuk menggunakan Turbo C ++ bahkan di zaman sekarang ini. Sayangnya, komunitas ini tidak dapat memperbaiki hal ini. Jika Anda berada dalam situasi ini, bersiaplah untuk tidak mendapatkan banyak bantuan dari luar.

n. 'kata ganti' m.
sumber
7
@ Rakete1111 Saya pikir ini lebih dalam arti "Program ini tidak mengandung masalah sesuai standar saat ini." Apakah itu gaya pemrograman yang bagus adalah hal lain.
Sombrero Chicken
21
@ Rakete1111 tidak ada yang salah dengan penggunaan yang bertanggung jawabusing namespace std . Ini mungkin atau mungkin bukan keputusan pedagogis yang baik untuk mengajarkannya kepada pemrogram baru, tapi itu tidak salah secara moral.
n. 'kata ganti' m.
10
Saya setuju itu using namespace stdadalah praktik yang buruk, tetapi saya pikir itu termasuk dalam pertanyaan ini, karena program C ++ hello world yang Anda temukan online hampir selalu melakukannya. Jadi, penting untuk memperjelas bahwa bukan itu yang membuat Turbo C ++ tidak menyenangkan. Mungkin alih-alih "Tidak ada masalah dengan program ini", katakan "Program ini valid, menurut standar C ++ saat ini ; ia harus dikompilasi."
zwol
5
@Puppy dengan token yang sama, semua panggilan ke fungsi standar tidak bertanggung jawab, karena Anda tidak tahu kelebihan beban baru apa yang akan ditambahkan. Anda juga tidak tahu fitur bahasa apa yang akan hilang dari standar berikutnya atau mengubah arti. Tidak semua program harus hidup selama beberapa dekade atau portabel ke kompiler sewenang-wenang.
n. 'kata ganti' m.
6
"Beberapa orang mengingat Turbo C ++" Saya tidak setuju. Setidaknya satu negara besar secara aktif diajarkan hari ini .
Balapan Ringan di Orbit
11

"Turbo C ++" bisa berarti banyak kompiler. Saat menanyakan pertanyaan ini, penting untuk menyertakan nomor versi.

  • Borland Turbo C ++ hingga versi 3.1 adalah kompiler MS DOS murni dengan IDE latar belakang biru klasik. Ini dirilis kira-kira antara tahun 1989 sampai 1992, jauh sebelum C ++ menjadi standar, yang terjadi pada tahun 1998. Jadi mereka menggunakan dialek pra-standar C ++.

    Terutama mereka menggunakan #include <iostream.h>sintaks daripada standar #include <iostream>, tetapi juga tidak mencakup banyak fitur C ++ seperti ruang nama, template dll. Pustaka template STL belum menjadi bagian dari standar, jadi segala sesuatu yang berhubungan dengan pustaka itu cukup berbeda dengan yang kemudian menjadi standar.

  • Kemudian di tahun 90-an, Borland merilis beberapa kompiler DOS / Windows dengan kesesuaian yang lebih baik. Hingga versi 5 di suatu tempat mereka masih berjuang dengan kesesuaian penuh dengan C ++ 98, meskipun versi Windows ini cukup dekat dengannya.

  • Pada akhir 90-an, mereka menghilangkan nama "Turbo C ++" untuk Borland C ++ Builder, yang bukan hanya IDE tetapi alat RAD lengkap berdasarkan Delphi. Kompiler ini sepenuhnya sesuai dengan C ++ 98 dan kemudian C ++ 03.

  • Sekitar tahun 2005, Borland mengeluarkan compiler sebagai bagian dari lini produk mereka. Penyusunnya menjadi "Codegear", yang kemudian menjadi Embarcadero. Sekitar saat itu, mereka merilis versi gratis dari Borland Builder yang mereka beri nama "Turbo C ++". Versi ini sepenuhnya sesuai dengan C ++ 03.

  • Saat ini kompiler ini disebut Embarcadero C ++ Builder. Saya yakin mereka saat ini mendukung hingga C ++ 11 dengan beberapa C ++ 14. Info selengkapnya di sini.

Tak perlu dikatakan, sebagai pelajar Anda tidak boleh menggunakan apa pun kecuali kompiler modern. Menggunakan kompiler MS DOS dari tahun 1991 ketika mempelajari C ++ di tahun 2018 adalah hal yang gila. Tidak hanya kontraproduktif, itu secara langsung berbahaya dan akan membuat Anda menjadi programmer C ++ yang buruk. Jika sekolah Anda memaksa Anda untuk menggunakan Turbo C ++ 3.1 atau yang lebih lama, maka sekolah Anda buruk dan guru Anda sangat tidak kompeten. Harap tautkan posting ini ke mereka dan kepala sekolah mereka.

Lundin
sumber
Turbo C ++ masih umum di India pada tahun 2020 . Lebih dan lebih - . "Itu berusia 40 tahun usang perguruan tinggi Turbo C. India masih mengajarkannya dan menolak untuk mengajar apa pun Mereka memberi saya nol mark, karena saya digunakan std::stringsebagai pengganti char *dalam ujian, karena mereka tidak tahu bahwa C ++ dibakukan dan char *sudah ditinggalkan." .
Peter Mortensen
@PeterMortensen Ya ... agak oke untuk mengajar C90 (lucu, masih lebih baik daripada Visual Studio dari tahun 2020), tetapi dialek C ++ yang digunakan hanya rusak.
Lundin
7

Turbo C ++ adalah kompilator yang sangat tua dan sedikit berbeda dari kompilator GNU C ++. Kode Anda bersama akan bekerja sempurna dengan compiler GNU tapi untuk menjalankannya dengan Turbo C ++ Anda perlu membuat beberapa perubahan:

1. Perubahan nama file header dari iostreamke iostream.h
2. Dan menghapus baris "menggunakan namespace std" Hal ini tidak diperlukan di Turbo C ++. Ini kode yang dimodifikasi:

#include <iostream.h>

int main() 
{
  cout << "Hello, World!";
  return 0;
}
Yougansh Thakur
sumber
6
Apa jawaban Anda menambahkan bahwa yang diterima tidak?
Rakete1111
7
inti bagi orang-orang yang tidak punya waktu untuk membaca jawaban panjang.
Yougansh Thakur
ini tidak "sedikit berbeda" tetapi sangat berbeda dari kompiler C ++
phuclv