সি প্লাস প্লাস ল্যাঙ্গুয়েজ স্ট্যান্ডার্ড। সি প্লাস প্লাস ল্যাঙ্গুয়েজ স্ট্যান্ডার্ড সি প্লাস প্রোগ্রামিং ল্যাঙ্গুয়েজ

বইটি C++ প্রোগ্রামিং ভাষার একটি ভূমিকা। এই বই এবং Dummies-এর জন্য C++ এর আগের সংস্করণগুলির মধ্যে প্রধান পার্থক্য হল যে এই সংস্করণটির জন্য পাঠকের কাছ থেকে কোনো অতিরিক্ত জ্ঞানের প্রয়োজন হয় না, যদিও পূর্ববর্তী সংস্করণগুলি উপাদানের উপস্থাপনার সরলতা সত্ত্বেও পাঠকের C প্রোগ্রামিং ভাষার জ্ঞানের উপর নির্ভর করে , এটি বইটিতে বেশ কঠোরভাবে উপস্থাপিত হয়েছে, যাতে, এই বইটির সাহায্যে C++ এ প্রোগ্রামিংয়ের মূল বিষয়গুলি অধ্যয়ন করার পরে, পাঠক আর অসুবিধার সম্মুখীন হবেন না।
পরবর্তী ভাষা শেখার সময়।
এই বইটি আপনাকে শেখায় না কিভাবে উইন্ডোজের জন্য প্রোগ্রাম করতে হয় বা কিভাবে দুটি মাউস ক্লিকের মাধ্যমে একটি সুন্দর ইন্টারফেস তৈরি করতে হয়; এতে উপস্থাপিত উপাদান কোনো নির্দিষ্ট কম্পাইলার বা অপারেটিং সিস্টেমের সাথে আবদ্ধ নয়। এটি একজন পেশাদার প্রোগ্রামারের পক্ষে কার্যকর হওয়ার সম্ভাবনা কম, তবে আপনার লক্ষ্য যদি একটি প্রোগ্রামিং ভাষার গভীর জ্ঞান হয় এবং আপনি কোথা থেকে শুরু করবেন তা জানেন না, এই বইটি আপনার জন্য।

C++ কি।
C++ হল একটি অবজেক্ট-ওরিয়েন্টেড নিম্ন-স্তরের প্রোগ্রামিং ভাষা যা ANSI এবং ইন্টারন্যাশনাল স্ট্যান্ডার্ড অর্গানাইজেশন (ISO) মান পূরণ করে। অবজেক্ট ওরিয়েন্টেড C++ এর অর্থ হল এটি এমন একটি প্রোগ্রামিং স্টাইল সমর্থন করে যা বড় আকারের প্রোগ্রামগুলিকে কোড করা সহজ এবং আরও এক্সটেনসিবল করে। একটি নিম্ন-স্তরের ভাষা হওয়ায়, C++ অত্যন্ত দক্ষ, উচ্চ-গতির প্রোগ্রাম তৈরি করতে পারে।

একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসাবে, C++ অত্যন্ত নমনীয় এবং এক্সটেনসিবল, এটিকে বড় আকারের প্রকল্পের জন্য উপযুক্ত করে তোলে। বর্তমানে, C++ হল যেকোনো ধরনের অ্যাপ্লিকেশন ডেভেলপ করার জন্য সবচেয়ে জনপ্রিয় প্রোগ্রামিং ল্যাঙ্গুয়েজগুলির মধ্যে একটি। ব্যক্তিগত কম্পিউটারে চলমান বেশিরভাগ আধুনিক প্রোগ্রাম C++ এ লেখা হয়।

বিষয়বস্তু
বিষয়বস্তু 6
ভূমিকা 17
পার্ট 1. C++ 23 এর সাথে প্রথম পরিচিতি
অধ্যায় 1: আপনার প্রথম প্রোগ্রাম লেখা 25
অধ্যায় 2. ভেরিয়েবল ঘোষণার জ্ঞান 41
অধ্যায় 3: গণিত 50 সম্পাদন করা
অধ্যায় 4: লজিক্যাল অপারেশন সম্পাদন করা 55
অধ্যায় 5. প্রোগ্রাম নিয়ন্ত্রণ বিবৃতি 66
পার্ট 2। কার্যকরী প্রোগ্রামার হওয়া 79
অধ্যায় 6: ফাংশন তৈরি করা 81
অধ্যায় 7. অ্যারে 92-এ সিকোয়েন্স সংরক্ষণ করা
অধ্যায় 8. C++ 105-এ পয়েন্টার দিয়ে শুরু করা
অধ্যায় 9. পয়েন্টার 117 সঙ্গে দ্বিতীয় পরিচিতি
অধ্যায় 10. C++ প্রোগ্রাম ডিবাগিং 128
পার্ট 3: ক্লাস 143 এর পরিচিতি
অধ্যায় 11: অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এর ভূমিকা 145
অধ্যায় 12. C++ 149-এ ক্লাস
অধ্যায় 13. ক্লাস 154 এর সাথে কাজ করা
অধ্যায় 14. বস্তুর প্রতি নির্দেশক 167
অধ্যায় 15. সুরক্ষিত শ্রেণীর সদস্যরা: বিরক্ত করবেন না! 181
অধ্যায় 16. বস্তু তৈরি এবং মুছে ফেলা 188
অধ্যায় 17. ডিজাইনের আর্গুমেন্টেশন 198
অধ্যায় 18. কপি কনস্ট্রাক্টর 213
অধ্যায় 19. স্ট্যাটিক সদস্য 224
অংশ 4. উত্তরাধিকার 231
অধ্যায় 20. ক্লাস ইনহেরিটেন্স 233
অধ্যায় 21: ভার্চুয়াল সদস্যের কার্যাবলীর পরিচয়: তারা কি বাস্তব 240
অধ্যায় 22. ক্লাস পচন 249
পার্ট 5. দরকারী বৈশিষ্ট্য 269
অধ্যায় 23। অ্যাসাইনমেন্ট অপারেটর 271
অধ্যায় 24: I/O স্ট্রীম 277 ব্যবহার করা
অধ্যায় 25: হ্যান্ডলিং ত্রুটি এবং ব্যতিক্রম 290
অধ্যায় 26. একাধিক উত্তরাধিকার 298
অধ্যায় 27. C++ টেমপ্লেট 308
অধ্যায় 28. স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি 317
পার্ট 6. ম্যাগনিফিসেন্ট টেন 329
অধ্যায় 29. ভুল এড়ানোর দশটি উপায় 331
অধ্যায় 30. Dev-C++ 336-এর সেরা দশটি বৈশিষ্ট্য
অধ্যায় 31. বাজেট 343 প্রোগ্রাম
আবেদন। সরবরাহকৃত সিডি 379 এর বিষয়বস্তু
Pictograms
বিষয় সূচক 380।


একটি সুবিধাজনক বিন্যাসে বিনামূল্যে ই-বুক ডাউনলোড করুন, দেখুন এবং পড়ুন:
ডামিজ, স্টেফান র্যান্ডি ডেভিস-এর জন্য C++ বইটি ডাউনলোড করুন - fileskachat.com, দ্রুত এবং বিনামূল্যে ডাউনলোড করুন।

সি ভাষাটি ডেনিস রিচি এবং ব্রায়ান কার্নিঘান 1969 এবং 1973 সালের মধ্যে তৈরি করেছিলেন। C এর উদ্দেশ্য ছিল ইউনিক্স অপারেটিং নেটওয়ার্ক বাস্তবায়ন করার জন্য, কিন্তু পরে এটি ব্যাপক অ্যাপ্লিকেশন খুঁজে পেয়েছে।

এই মুহুর্তে, শি একটি স্থিতিশীল দ্বিতীয় স্থান দখল করে আছে।

কেন আপনি সি প্রয়োজন?

আমরা ইতিমধ্যে সি ভাষার গুরুত্ব সম্পর্কে কথা বলেছি, তাই আসুন মূল বিষয়গুলি নিয়ে যাই।

শুরুতে, বেশিরভাগ সিস্টেম সফ্টওয়্যার সি ভাষায় লেখা হয়। সর্বাধিক জনপ্রিয় ওপেন সোর্স লিনাক্স ওএসের কার্নেলটি সি তে লেখা হয়েছিল।

C এর একটি বিশাল সুবিধা হল যে ভাষার প্রতিটি নির্দেশ সরাসরি এবং বোধগম্য উপায়ে মেশিন কোডে অনুবাদ করা হয়। প্রোগ্রামার স্ক্রিনে যে কোডটি দেখেন ঠিক সেই কোডটি কার্যকর করা হয়। যাইহোক, আধুনিক কম্পাইলারগুলিতে, অবশ্যই, তারা ব্যবহার করা যেতে পারে, তবে সংখ্যালঘু ক্ষেত্রে।

এটিও লক্ষণীয় যে সর্বাধিক জনপ্রিয় প্রোগ্রামিং ভাষাগুলি এক বা অন্যভাবে সি এর সাথে সম্পর্কিত। সুতরাং, উদাহরণস্বরূপ, জাভা এবং সি# এর একটি তথাকথিত সি-এর মতো সিনট্যাক্স রয়েছে, এবং সি++ এবং অবজেক্টিভ-সি হল এক বা অন্যভাবে সি এক্সটেনশন।

আপনি যদি যেকোনো ডায়নামিক প্রোগ্রামিং ল্যাঙ্গুয়েজে কোড লেখেন, তা পিএইচপি, জাভাস্ক্রিপ্ট বা পাইথনই হোক না কেন, তার ইন্টারপ্রেটার, রানটাইম এবং বেশিরভাগ লাইব্রেরি মূলত সি-তে লেখা হয়। অতএব, একটি নির্দিষ্ট ভাষার আচরণগত বৈশিষ্ট্যগুলি বোঝার জন্য, আপনাকে সি ভাষার বৈশিষ্ট্যগুলি জানতে হবে। এবং আপনি যদি আপনার প্রোগ্রামিং ভাষার ক্ষমতার বাইরে চলে যান, তবে আপনি এটি জানার আগে, আপনি সি-তে একটি নতুন এক্সটেনশন লিখতে শুরু করবেন।

উপরন্তু, C-এর জ্ঞান প্রোগ্রামারকে উচ্চ-স্তরের প্রোগ্রামিং ভাষার সমস্ত আনন্দ এবং সেইসাথে সেগুলি ব্যবহার করার সময় যে সীমাবদ্ধতা দেখা দেয় তা সত্যিই উপলব্ধি করতে দেয়।

আর এগুলোই সি শেখার কারণ।

এরপর কি?

এখন যেহেতু আমরা বুঝতে পেরেছি কেন আমাদের সি প্রয়োজন, একটি যৌক্তিক প্রশ্ন উঠেছে: "কিভাবে এটি শিখতে হবে?"

বই "সি প্রোগ্রামিং ভাষা"

এই প্রোগ্রামিং ল্যাঙ্গুয়েজের নির্মাতাদের চেয়ে সি সম্পর্কে আপনাকে ভালো কেউ বলতে পারবে না। অতএব, ডেনিস রিচি এবং ব্রায়ান কার্নিঘ্যানের লেখা "দ্য সি প্রোগ্রামিং ল্যাঙ্গুয়েজ" বইটি প্রত্যেকের জন্য অবশ্যই থাকা উচিত যারা তাদের জীবনকে সি-এর সাথে সংযুক্ত করার সিদ্ধান্ত নিয়েছে।

কোর্স "সম্পূর্ণ সি বিকাশকারী কোর্স - 7টি উত্তেজনাপূর্ণ প্রকল্প তৈরি করুন"

কোর্সটি ভাষার মৌলিক দিক এবং আরও উন্নত বিষয়গুলিকে কভার করে: গ্রাফিক্স প্রোগ্রামিং, মেমরি মডেল এবং আরও অনেক কিছু। কোর্স চলাকালীন, আপনি 7টি উত্তেজনাপূর্ণ প্রকল্প তৈরি করবেন, যেমন একটি ডাটাবেস ম্যানেজমেন্ট সিস্টেম এবং আপনার নিজের কম্পিউটার ভাইরাস।

কোর্সটি অর্থপ্রদান করা হয়, তবে এটি অবশ্যই অর্থের মূল্যবান। পরবর্তী আমরা বিনামূল্যে উপকরণ অফার.

বিখ্যাত হার্ভার্ড কোর্স "CS50"

এখন সে কথা বলছে। সর্বোপরি, CS50 আপনাকে শেখাবে কিভাবে চিন্তা করতে হয়। কোর্স চলাকালীন আপনি কভার করবেন এমন কিছু বিষয় হল বিমূর্ততা, অ্যালগরিদম, ডেটা স্ট্রাকচার, এনক্যাপসুলেশন, রিসোর্স ম্যানেজমেন্ট, সিকিউরিটি, সফটওয়্যার ডেভেলপমেন্ট এবং ওয়েব ডেভেলপমেন্ট। আপনি যে ভাষাগুলি ব্যবহার করবেন তা হল C, Python, SQL এবং JavaScript সহ HTML এবং CSS। এবং সবচেয়ে গুরুত্বপূর্ণ, কোর্সটি বিনামূল্যে।

বিনামূল্যে কোর্স "শিশুদের জন্য সি টিউটোরিয়াল"

এই প্রোগ্রামটির মাধ্যমে আপনি সি ভাষার মূল বিষয়গুলি শিখবেন, পয়েন্টার, কাঠামো এবং ইউনিয়নগুলি বুঝতে পারবেন এবং সহজ প্রোগ্রামগুলি কীভাবে লিখতে হয় তা শিখবেন।

দুটি শীর্ষস্থানীয় ফিনিশ বিশ্ববিদ্যালয় থেকে বিনামূল্যে অনলাইন সি কোর্স

ব্যাপক উপকরণ এবং অনেক প্রোগ্রামিং ব্যায়াম, সেইসাথে একটি স্বয়ংক্রিয় পরীক্ষার সিস্টেম অন্তর্ভুক্ত।

কোর্সটি যৌথভাবে আল্টো ইউনিভার্সিটি এবং হেলসিঙ্কি ইউনিভার্সিটি দ্বারা তৈরি করা হয়েছিল (একই যেখানে লিনাস টরভাল্ডস একবার অধ্যয়ন করেছিলেন), এবং এতে ব্যাখ্যা করা উপাদানগুলি এই বিশ্ববিদ্যালয়গুলিতে পড়ানো সি কোর্সগুলির সম্পূর্ণ নকল করে।

বই "লার্ন সি দ্য হার্ড ওয়ে"

বইটি আপনাকে সি শেখাবে যা বাস্তব জীবনে বাস্তব প্রকল্প তৈরি করতে ব্যবহৃত হয়, বিমূর্ত প্রক্রিয়া এবং পেডানটিক তত্ত্ব নয়। আপনি অ্যালগরিদম এবং ডেটা স্ট্রাকচার এবং স্বয়ংক্রিয় পরীক্ষার মতো বেশ কয়েকটি গুরুত্বপূর্ণ বিষয়ও শিখবেন। আগ্রহীরা রাশিয়ান ভাষায় এর অনুবাদ খুঁজে পেতে পারেন। Tproger এছাড়াও প্রায়ই ভাল প্রোগ্রামিং বই সুপারিশ, তাই চেক আউট

সি প্রোগ্রামিং ভাষার জনপ্রিয়তা অত্যধিক মূল্যায়ন করা কঠিন, বিশেষ করে এর অতীত অর্জনগুলি স্মরণ করা। সম্ভবত প্রতিটি বিকাশকারী, সর্বনিম্নভাবে, এর অস্তিত্ব সম্পর্কে জানে এবং সর্বাধিকভাবে এটিতে প্রোগ্রাম করার চেষ্টা করেছে। C হল C++, Objective-C, C#, Java এর মতো ভাষার পূর্বসূরী।

মাইক্রোসফ্ট তার .নেট প্ল্যাটফর্মের জন্য স্থানীয় ভাষা বিকাশের জন্য সি-এর মতো সিনট্যাক্স বেছে নিয়েছে। তাছাড়া অনেক অপারেটিং সিস্টেম সি তে লেখা থাকে।

অবশ্যই, সি নিখুঁত নয়: ভাষার স্রষ্টা, কেন থম্পসন এবং ডেনিস রিচি, এটি পরিমার্জন করতে দীর্ঘ সময় ব্যয় করেছেন। সি-এর প্রমিতকরণ এখনও চলছে। এটি প্রায় 45 বছরেরও বেশি সময় ধরে এবং সক্রিয়ভাবে ব্যবহৃত হয়।

এটি প্রায়শই একটি নয়, দুটি প্রোগ্রামিং ভাষার সাথে যুক্ত থাকে - C/C++। যাইহোক, নীচে আমরা "বিশুদ্ধ" সি সম্পর্কে বিশেষভাবে কথা বলব।

সি ভাষার শিকড় রয়েছে ALGOL (ALGorithmic Language), যা 1958 সালে ETH জুরিখে একটি সভায় ইউরোপীয় এবং আমেরিকান কম্পিউটার বিজ্ঞানীদের একটি কমিটি দ্বারা তৈরি করা হয়েছিল। ভাষাটি ছিল FORTRAN ভাষার কিছু ত্রুটির প্রতিক্রিয়া এবং সেগুলি সংশোধন করার প্রচেষ্টা। এছাড়াও, C-এর বিকাশ ঘনিষ্ঠভাবে ইউনিক্স অপারেটিং সিস্টেম তৈরির সাথে সম্পর্কিত, যেটি কেন থম্পসন এবং ডেনিস রিচিও কাজ করেছিলেন।

ইউনিক্স

MAC (মাল্টিপল অ্যাকসেস কম্পিউটার, মেশিন-এইডেড কগনিশন, ম্যান অ্যান্ড কম্পিউটার) প্রকল্পটি এমআইটিতে 1963 সালে সম্পূর্ণরূপে গবেষণা প্রকল্প হিসাবে শুরু হয়েছিল।

MAC প্রকল্পের অংশ হিসেবে, CTSS (কম্প্যাটিবল টাইম-শেয়ারিং সিস্টেম) অপারেটিং সিস্টেম তৈরি করা হয়েছিল। 60-এর দশকের দ্বিতীয়ার্ধে, বিবিএন, ডিটিএসএস, জেওএসএস, এসডিসি এবং মাল্টিপ্লেক্সড ইনফরমেশন অ্যান্ড কম্পিউটিং সার্ভিস (মাল্টিকস) এর মতো আরও বেশ কয়েকটি সময় ভাগ করে নেওয়ার সিস্টেম তৈরি করা হয়েছিল।

মাল্টিক্স হল এমআইটি, বেল টেলিফোন ল্যাবরেটরিজ (বিটিএল) এবং জেনারেল ইলেকট্রিক (জিই) এর মধ্যে একটি যৌথ প্রচেষ্টা যা জিই-645 কম্পিউটারের জন্য একটি টাইম শেয়ারিং অপারেটিং সিস্টেম তৈরি করে। মাল্টিক্স চালিত সর্বশেষ কম্পিউটারটি 31 অক্টোবর, 2000 সালে বন্ধ হয়ে যায়।

যাইহোক, বিটিএল 1969 সালের শুরুতে এই প্রকল্পটি পরিত্যাগ করে।

তার কিছু কর্মচারী (কেন থম্পসন, ডেনিস রিচি, স্টু ফেল্ডম্যান, ডগ ম্যাকিলরয়, বব মরিস, জো ওসানা) তাদের নিজের কাজ চালিয়ে যেতে চেয়েছিলেন। থম্পসন GE-635-এ মহাকাশ ভ্রমণ গেমটিতে কাজ করেছিলেন। এটি প্রথমে মাল্টিক্সের জন্য লেখা হয়েছিল, এবং তারপর GE-635-এ GECOS-এর অধীনে ফোর্টরানে পুনরায় লেখা হয়েছিল। গেমটি সৌরজগতের দেহগুলিকে অনুকরণ করেছিল এবং খেলোয়াড়কে জাহাজটিকে কোথাও একটি গ্রহ বা উপগ্রহে অবতরণ করতে হয়েছিল।

এই কম্পিউটারের সফ্টওয়্যার বা হার্ডওয়্যার এই ধরনের গেমের জন্য উপযুক্ত ছিল না। থম্পসন একটি বিকল্প খুঁজছিলেন, এবং একটি পরিত্যক্ত PDP-7 এর জন্য গেমটি পুনরায় লিখলেন। মেমরিটি ছিল 8K 18-বিট শব্দ, এবং সেই সময়ের জন্য সুন্দর গ্রাফিক্স প্রদর্শনের জন্য একটি ভেক্টর ডিসপ্লে প্রসেসরও ছিল।


slideshare.net থেকে ছবি

থম্পসন এবং রিচি জিই-তে ক্রস-অ্যাসেম্বলারে সমস্ত উন্নয়ন করেছেন এবং পাঞ্চড টেপে কোড স্থানান্তর করেছেন। থম্পসন সক্রিয়ভাবে এটি অপছন্দ করেন এবং ফাইল সিস্টেম থেকে শুরু করে PDP-7 এর জন্য একটি ওএস লিখতে শুরু করেন। এভাবেই ইউনিক্সের জন্ম হয়।

থম্পসন একটি আরামদায়ক কম্পিউটিং পরিবেশ তৈরি করতে চেয়েছিলেন, যে কোনো উপলব্ধ উপায় ব্যবহার করে তার নকশা অনুযায়ী নির্মিত। তার ধারনাগুলি, স্পষ্টতই পূর্ববর্তী সময়ে, মাল্টিক্সের অনেক উদ্ভাবনকে অন্তর্ভুক্ত করেছে, যার মধ্যে রয়েছে ব্যবস্থাপনার ভিত্তি হিসাবে প্রক্রিয়ার ধারণা, একটি গাছ-ভিত্তিক ফাইল সিস্টেম, একটি ব্যবহারকারী প্রোগ্রাম হিসাবে একটি কমান্ড দোভাষী, পাঠ্য ফাইলগুলির সরলীকৃত উপস্থাপনা, এবং সাধারণীকৃত অ্যাক্সেস ডিভাইস

PDP-7 UNIX উচ্চ-স্তরের বি ভাষার সূচনাও করেছে, যা বিসিপিএল ভাষা দ্বারা প্রভাবিত হয়েছিল। ডেনিস রিচি বলেছেন যে B হল C প্রকার ছাড়াই। BCPL 8 KB মেমরিতে ফিট করে এবং থম্পসন যত্ন সহকারে পুনরায় ডিজাইন করেছিলেন। বি ধীরে ধীরে এস তে বেড়ে ওঠে।


ছবি it-world.com থেকে

1973 সাল নাগাদ, সি ভাষা যথেষ্ট শক্তিশালী হয়ে উঠেছিল যে UNIX কার্নেলের বেশিরভাগ অংশ, যা মূলত PDP-11/20 অ্যাসেম্বলি ভাষায় লেখা হয়েছিল, C-তে পুনরায় লেখা হয়েছিল। এটি অ্যাসেম্বলি ভাষা ব্যতীত অন্য ভাষায় লেখা প্রথম অপারেটিং সিস্টেম কার্নেলগুলির মধ্যে একটি।

দেখা যাচ্ছে যে C হল একটি "সম্পর্কিত পণ্য" যা UNIX অপারেটিং সিস্টেম তৈরির সময় প্রাপ্ত।

জি এর পূর্বপুরুষ

ALGOL-60 ভাষা দ্বারা অনুপ্রাণিত হয়ে, ক্যামব্রিজ বিশ্ববিদ্যালয়ের গণিত পরীক্ষাগার, লন্ডন বিশ্ববিদ্যালয়ের কম্পিউটার বিভাগের সাথে, 1963 সালে CPL (কম্বাইন্ড প্রোগ্রামিং ভাষা) ভাষা তৈরি করে।

সিপিএল ভাষা কঠিন বলে বিবেচিত হয়েছিল, এবং এর প্রতিক্রিয়া হিসাবে, মার্টিন রিচার্ডসন 1966 সালে বিসিপিএল ভাষা তৈরি করেছিলেন, যার মূল উদ্দেশ্য ছিল কম্পাইলার লেখা। আজকাল এটি ব্যবহারিকভাবে ব্যবহৃত হয় না, তবে এক সময় এটির ভাল বহনযোগ্যতার কারণে এটি একটি গুরুত্বপূর্ণ ভূমিকা পালন করেছিল।

বিসিপিএল 1970 এর দশকের গোড়ার দিকে ওএস6 অপারেটিং সিস্টেম সহ বেশ কয়েকটি আকর্ষণীয় প্রকল্পে এবং আংশিকভাবে জেরক্স পিএআরসি-এর নতুন বিকাশে ব্যবহৃত হয়েছিল।

বিসিপিএল দ্বি (বি) ভাষার পূর্বপুরুষ হিসেবে কাজ করেছে, যেটি 1969 সালে ইতিমধ্যে পরিচিত AT&T বেল টেলিফোন ল্যাবরেটরিতে বিকশিত হয়েছিল, এটি কেন থম্পসন এবং ডেনিস রিচির কাছে কম পরিচিত নয়।

তৎকালীন অন্যান্য অপারেটিং সিস্টেমের মতো ইউনিক্সও অ্যাসেম্বলি ভাষায় লেখা হতো। অ্যাসেম্বলারে প্রোগ্রামগুলি ডিবাগ করা একটি আসল ব্যথা। থম্পসন সিদ্ধান্ত নেন যে ওএসের আরও উন্নয়নের জন্য একটি উচ্চ-স্তরের ভাষা প্রয়োজন এবং একটি ছোট ভাষা বি নিয়ে আসেন। থম্পসন বিসিপিএল ভাষাকে ভিত্তি হিসেবে গ্রহণ করেন। ভাষা বিকে ধরন ছাড়াই সি হিসাবে ভাবা যেতে পারে।

BCPL, B, এবং C অনেক বিবরণে সিনট্যাক্টিকভাবে ভিন্ন, কিন্তু তারা মূলত একই রকম। প্রোগ্রামগুলি বিশ্বব্যাপী ঘোষণা এবং ফাংশন (প্রক্রিয়া) ঘোষণাগুলির একটি ক্রম নিয়ে গঠিত। বিসিপিএল-এ, পদ্ধতিগুলি নেস্ট করা যেতে পারে, তবে তাদের ধারণকারী পদ্ধতিতে সংজ্ঞায়িত নন-স্ট্যাটিক বস্তুর উল্লেখ করতে পারে না। B এবং C একটি কঠোর প্রবর্তন করে এই বিধিনিষেধটি এড়ায়: কোনও নেস্টেড পদ্ধতি নেই। প্রতিটি ভাষা (B-এর সবচেয়ে প্রাচীন সংস্করণগুলি ব্যতীত) পৃথক সংকলন সমর্থন করে এবং নামযুক্ত ফাইলগুলি থেকে পাঠ্য অন্তর্ভুক্ত করার সুবিধা প্রদান করে।

বি-এর সৃষ্টির সময় যে ব্যাপক সিনট্যাক্স পরিবর্তন হয়েছিল তার বিপরীতে, বিসিপিএল-এর মূল শব্দার্থবিদ্যা-এর ধরন গঠন এবং অভিব্যক্তি মূল্যায়নের নিয়ম-অক্ষত ছিল। উভয় ভাষাই টাইপলেস, বা বরং একটি একক ডেটা টাইপ আছে - "শব্দ" বা "সেল", একটি নির্দিষ্ট দৈর্ঘ্যের বিটের একটি সেট। এই ভাষাগুলিতে মেমরি হ'ল এই জাতীয় কোষগুলির একটি অ্যারে এবং একটি কোষের বিষয়বস্তুর অর্থ এটিতে প্রয়োগ করা অপারেশনের উপর নির্ভর করে। উদাহরণস্বরূপ, "+" অপারেটর অ্যাড মেশিন নির্দেশনা ব্যবহার করে সহজভাবে তার অপারেন্ডগুলি যোগ করে এবং অন্যান্য গাণিতিক ক্রিয়াকলাপগুলিও তাদের অপারেন্ডগুলির অর্থের প্রতি উদাসীন।

বিসিপিএল, বি বা সি উভয়ই ভাষায় অক্ষর ডেটা বরাদ্দ করে না; তারা স্ট্রিংগুলিকে পূর্ণসংখ্যার ভেক্টর হিসাবে বিবেচনা করে এবং সাধারণ নিয়মগুলিতে বেশ কয়েকটি নিয়ম যুক্ত করে। বিসিপিএল এবং বি উভয় ক্ষেত্রেই, একটি স্ট্রিং আক্ষরিক অর্থ হল একটি স্থির এলাকার ঠিকানা যেখানে স্ট্রিং অক্ষরগুলি কোষে প্যাক করা হয়েছে।

কিভাবে সি তৈরি করা হয়েছিল

1970 সালে, বেল ল্যাবস প্রকল্পের জন্য একটি PDP-11 কম্পিউটার কিনেছিল। যেহেতু B PDP-11-এ চালানোর জন্য প্রস্তুত ছিল, থম্পসন B-তে UNIX অংশটি পুনরায় লিখেছেন।

কিন্তু মডেল বি এবং বিসিপিএল পয়েন্টারগুলির সাথে কাজ করার সময় একটি ওভারহেড বোঝায়: ভাষার নিয়ম, শব্দের বিন্যাসে একটি পয়েন্টারকে একটি সূচক হিসাবে সংজ্ঞায়িত করে, শব্দের পয়েন্টার সূচক তৈরি করে। এক্সিকিউশনের সময় প্রতিটি পয়েন্টার অ্যাক্সেস বাইট ঠিকানায় পয়েন্টারের একটি স্কেলিং তৈরি করে যা প্রসেসরের প্রত্যাশা ছিল।

অতএব, এটা স্পষ্ট হয়ে গেল যে অক্ষর এবং বাইট অ্যাড্রেসিংয়ের সাথে মোকাবিলা করার জন্য, সেইসাথে ফ্লোটিং পয়েন্ট গণনার জন্য আসন্ন হার্ডওয়্যার সমর্থনের জন্য প্রস্তুত করার জন্য, টাইপিংয়ের প্রয়োজন ছিল।

1971 সালে, রিচি B-এর একটি সম্প্রসারিত সংস্করণ তৈরি করা শুরু করেন। প্রথমে তিনি এটিকে NB (নতুন B) নামে ডাকেন, কিন্তু ভাষাটি B থেকে খুব আলাদা হয়ে গেলে নামটি C-তে পরিবর্তন করা হয়। রিচি নিজেই এটি সম্পর্কে লিখেছেন:

আমি চেয়েছিলাম যে কাঠামোটি কেবলমাত্র একটি বিমূর্ত বস্তুর বৈশিষ্ট্যই নয়, তবে বিটগুলির একটি সেটও বর্ণনা করবে যা ডিরেক্টরি থেকে পড়া যেতে পারে। কোথায় কম্পাইলার পয়েন্টার লুকাতে পারে যে নামের শব্দার্থবিদ্যা প্রয়োজন? এমনকি যদি স্ট্রাকচারগুলি আরও বিমূর্ত হওয়ার উদ্দেশ্যে করা হয়, এবং পয়েন্টারগুলির জন্য স্থান কোথাও লুকিয়ে রাখা যেতে পারে, একটি জটিল বস্তুর জন্য মেমরি বরাদ্দ করার সময় আমি কীভাবে সেই পয়েন্টারগুলিকে সঠিকভাবে আরম্ভ করার প্রযুক্তিগত সমস্যা সমাধান করব, সম্ভবত এমন একটি কাঠামো যার মধ্যে অ্যারে রয়েছে যা কাঠামো রয়েছে ইত্যাদি। একটি নির্বিচারে গভীরতা থেকে?

সমাধানটি ছিল টাইপলেস বিসিপিএল এবং টাইপড সি-এর মধ্যে বিবর্তনীয় শৃঙ্খলে একটি সিদ্ধান্তমূলক লাফ। এটি পয়েন্টারকে সঞ্চয়স্থানে পরিণত করে, এবং এর পরিবর্তে যখন অ্যারের নাম অভিব্যক্তিতে উল্লেখ করা হয়েছিল তখন এটি তৈরি করা হয়েছিল। একটি নিয়ম যা আজকের C-তে চলতে থাকে তা হল যে অ্যারের মানগুলি, যখন একটি অভিব্যক্তিতে উল্লেখ করা হয়, তখন সেই অ্যারে তৈরি করা বস্তুগুলির প্রথমটিতে পয়েন্টারে রূপান্তরিত হয়।

দ্বিতীয় উদ্ভাবন যা C এর পূর্বসূরীদের থেকে সবচেয়ে স্পষ্টভাবে আলাদা করে তা হল এই আরও সম্পূর্ণ ধরনের কাঠামো এবং বিশেষ করে ঘোষণা বাক্য গঠনে এর অভিব্যক্তি। এনবি প্রাথমিক প্রকারের int এবং char, তাদের অ্যারে এবং পয়েন্টার সহ প্রস্তাব করেছে, কিন্তু সেগুলি রচনা করার অন্য কোন উপায় নেই।

একটি সাধারণীকরণ প্রয়োজন ছিল: যেকোন ধরনের বস্তুর জন্য একটি নতুন অবজেক্ট বর্ণনা করা সম্ভব হওয়া উচিত যা একটি অ্যারেতে এই ধরনের বেশ কয়েকটি বস্তুকে একত্রিত করে, এটি একটি ফাংশন থেকে গ্রহণ করে বা এটির একটি নির্দেশক।



সি ল্যাঙ্গুয়েজ থেকে ছবি: এম. ওয়েট, এস. প্রাটা, ডি. মার্টিন

এই ধরনের একটি যৌগিক ধরনের যেকোন বস্তুর জন্য, ইতিমধ্যেই একটি উপায় ছিল যে বস্তুটি এটির অংশটি নির্দেশ করে: অ্যারেকে সূচী করুন, একটি ফাংশন কল করুন, নির্দেশকের সাথে নির্দেশ অপারেটর ব্যবহার করুন। অনুরূপ যুক্তি নাম ঘোষণা করার জন্য একটি সিনট্যাক্সের দিকে পরিচালিত করে যা সেই নামগুলি যেখানে ব্যবহৃত হয় সেখানে অভিব্যক্তির সিনট্যাক্স প্রতিফলিত করে। তাই

একটি পূর্ণসংখ্যা ঘোষণা করে, একটি পূর্ণসংখ্যার একটি নির্দেশক এবং একটি পূর্ণসংখ্যার একটি নির্দেশককে একটি নির্দেশক। এই ঘোষণাগুলির সিনট্যাক্স এই সত্যটিকে প্রতিফলিত করে যে i, *pi, এবং **ppi সবগুলি একটি এক্সপ্রেশনে ব্যবহৃত হলে int টাইপ করে। একই ভাবে
একটি ফাংশন ঘোষণা করুন যা একটি পূর্ণসংখ্যা প্রদান করে, একটি ফাংশন যা একটি পূর্ণসংখ্যাতে একটি পয়েন্টার প্রদান করে, একটি ফাংশনে একটি পয়েন্টার যা একটি পূর্ণসংখ্যা প্রদান করে;
একটি পূর্ণসংখ্যা পয়েন্টার একটি অ্যারে ঘোষণা, পূর্ণসংখ্যা একটি অ্যারের একটি পয়েন্টার.

এই সমস্ত ক্ষেত্রে, একটি ভেরিয়েবল ঘোষণা করা একটি অভিব্যক্তিতে এর ব্যবহারের সাথে সাদৃশ্যপূর্ণ যার ধরন ঘোষণার শুরুতে যাই হোক না কেন।

70s: "কষ্টের সময়" এবং মিথ্যা উপভাষা

1973 সাল নাগাদ, ভাষাটি যথেষ্ট স্থিতিশীল হয়ে উঠেছিল যাতে UNIX পুনরায় লেখা যায়। C-তে স্যুইচ করা একটি গুরুত্বপূর্ণ সুবিধা প্রদান করেছে: বহনযোগ্যতা। বেল ল্যাবসের প্রতিটি মেশিনের জন্য একটি সি কম্পাইলার লিখে, ডেভেলপমেন্ট টিম তাদের কাছে ইউনিক্স পোর্ট করতে পারে।

সি ভাষার উত্থান সম্পর্কে, পিটার ময়লান তার বই "সি এর বিরুদ্ধে মামলা" এ লিখেছেন: "একটি ভাষা প্রয়োজন ছিল যা কিছু কঠোর নিয়মকে বাইপাস করতে পারে যা বেশিরভাগ উচ্চ-স্তরের ভাষায় নির্মিত এবং তাদের নিশ্চিত করতে পারে। নির্ভরযোগ্যতা আমাদের এমন একটি ভাষার প্রয়োজন ছিল যা আমাদেরকে তা করতে দেয় যা আগে করা যেত কেবল সমাবেশ ভাষা বা মেশিন কোড স্তরে।"

সি 70 এর দশকে বিকশিত হতে থাকে। 1973-1980-এর দশকে, ভাষাটি একটু বেড়েছে: টাইপ স্ট্রাকচারটি স্বাক্ষরবিহীন, দীর্ঘ প্রকার, ইউনিয়ন এবং গণনা প্রাপ্ত হয়েছে, কাঠামোগুলি ক্লাস অবজেক্টের কাছাকাছি হয়ে গেছে (শুধুমাত্র আক্ষরিক জন্য স্বরলিপি অনুপস্থিত ছিল)।

সি এর উপর প্রথম বই। সি প্রোগ্রামিং ল্যাঙ্গুয়েজ, ব্রায়ান কার্নিঘান এবং ডেনিস রিচির লেখা এবং 1978 সালে প্রকাশিত, সি প্রোগ্রামারদের বাইবেল হয়ে উঠেছে। একটি অফিসিয়াল স্ট্যান্ডার্ডের অনুপস্থিতিতে, এই বইটি - কেএন্ডআর নামেও পরিচিত, বা "হোয়াইট বুক" হিসাবে সি ভক্তরা এটিকে ডাকতে পছন্দ করে - ডি ফ্যাক্টো স্ট্যান্ডার্ডে পরিণত হয়েছে৷


Learnc.info থেকে ছবি

70 এর দশকে কিছু সি প্রোগ্রামার ছিল এবং তাদের বেশিরভাগই ইউনিক্স ব্যবহারকারী ছিল। যাইহোক, 80 এর দশকে, সি ইউনিক্স বিশ্বের সংকীর্ণ সীমানার বাইরে চলে যায়। বিভিন্ন অপারেটিং সিস্টেম চালিত বিভিন্ন মেশিনে সি কম্পাইলার পাওয়া যায়। বিশেষ করে, সি দ্রুত বিকাশমান আইবিএম পিসি প্ল্যাটফর্মে ছড়িয়ে পড়তে শুরু করে।

K&R নিম্নলিখিত ভাষার বৈশিষ্ট্যগুলি চালু করেছে:

স্ট্রাকচার (ডেটা টাইপ স্ট্রাকচার);
দীর্ঘ পূর্ণসংখ্যা (লং int ডেটা টাইপ);
স্বাক্ষরবিহীন পূর্ণসংখ্যা (ডাটা টাইপ স্বাক্ষরবিহীন int);
অপারেটর += এবং অনুরূপগুলি (পুরানো অপারেটরগুলি =+ সি কম্পাইলারের আভিধানিক বিশ্লেষককে বিভ্রান্ত করে, উদাহরণস্বরূপ, যখন i =+ 10 এবং i = +10 অভিব্যক্তির তুলনা করা হয়)।

K&R C কে প্রায়শই ভাষার সবচেয়ে গুরুত্বপূর্ণ অংশ হিসাবে বিবেচনা করা হয় যা একটি C কম্পাইলারকে অবশ্যই সমর্থন করতে হবে। বহু বছর ধরে, এমনকি ANSI C প্রকাশের পরেও, এটি সর্বনিম্ন স্তর হিসাবে বিবেচিত হয়েছিল যে প্রোগ্রামাররা তাদের প্রোগ্রামগুলি থেকে সর্বাধিক বহনযোগ্যতা চান তাদের মেনে চলা উচিত, কারণ তখন সমস্ত কম্পাইলার ANSI C সমর্থন করে না এবং ANSI C এর জন্য ভাল K&R C কোড সঠিক ছিল। .

জনপ্রিয়তা বৃদ্ধির পাশাপাশি সমস্যাও এসেছে। যে প্রোগ্রামাররা নতুন কম্পাইলার লিখেছেন তারা কেএন্ডআর-এ বর্ণিত ভাষাটিকে ভিত্তি হিসেবে গ্রহণ করেছেন। দুর্ভাগ্যবশত, কেএন্ডআর-এ ভাষার কিছু বৈশিষ্ট্য অস্পষ্টভাবে বর্ণনা করা হয়েছিল, তাই কম্পাইলাররা প্রায়শই তাদের নিজস্ব বিবেচনার ভিত্তিতে তাদের ব্যাখ্যা করে। উপরন্তু, বইটি ভাষার একটি বৈশিষ্ট্য কি এবং UNIX অপারেটিং সিস্টেমের একটি বৈশিষ্ট্য কি এর মধ্যে একটি স্পষ্ট পার্থক্য করেনি।

K&R C প্রকাশের পর থেকে, ভাষাটিতে বেশ কিছু বৈশিষ্ট্য যুক্ত করা হয়েছে, যা AT&T এবং কিছু অন্যান্য নির্মাতাদের দ্বারা সমর্থিত:

যে ফাংশনগুলি একটি মান (টাইপ void) ফেরত দেয় না এবং যে পয়েন্টারগুলির একটি টাইপ নেই (টাইপ void *);
ফাংশন যা ইউনিয়ন এবং কাঠামো প্রদান করে;
প্রতিটি কাঠামোর জন্য বিভিন্ন নামস্থানে এই কাঠামোর ক্ষেত্রের নাম;
গঠন বরাদ্দ;
constant specifier (const);
একটি স্ট্যান্ডার্ড লাইব্রেরি যা বিভিন্ন নির্মাতাদের দ্বারা প্রবর্তিত বেশিরভাগ ফাংশন প্রয়োগ করে;
enum type (enum);
একক নির্ভুল ভগ্নাংশ সংখ্যা (ফ্লোট)।

যেটি পরিস্থিতিকে আরও খারাপ করে তুলেছিল তা হল K&R প্রকাশের পরে, C ক্রমাগত বিকাশ করতে থাকে: এতে নতুন বৈশিষ্ট্য যুক্ত করা হয়েছিল এবং পুরানোগুলি কেটে ফেলা হয়েছিল। শীঘ্রই ভাষার একটি ব্যাপক, নির্ভুল এবং আধুনিক বর্ণনার সুস্পষ্ট প্রয়োজন ছিল। এই জাতীয় মান ছাড়াই, ভাষার উপভাষাগুলি উপস্থিত হতে শুরু করে, যা বহনযোগ্যতায় হস্তক্ষেপ করেছিল - ভাষার সবচেয়ে বড় শক্তি।

মান

1970-এর দশকের শেষের দিকে, C ভাষা বেসিককে প্রতিস্থাপন করতে শুরু করে, যা সেই সময়ে মাইক্রোকম্পিউটার প্রোগ্রামিং-এর প্রধান ছিল। 1980-এর দশকে, এটি আইবিএম-পিসি আর্কিটেকচারের সাথে খাপ খাইয়ে নেওয়া হয়েছিল, যার ফলে এটির জনপ্রিয়তা উল্লেখযোগ্যভাবে বৃদ্ধি পায়।

আমেরিকান ন্যাশনাল স্ট্যান্ডার্ড ইনস্টিটিউট (এএনএসআই) সি ভাষার মান উন্নয়ন শুরু করে। তার অধীনে, 1983 সালে, X3J11 কমিটি গঠিত হয়েছিল, যা মান উন্নয়ন শুরু করেছিল। স্ট্যান্ডার্ডের প্রথম সংস্করণটি 1989 সালে প্রকাশিত হয়েছিল এবং C89 বলা হয়েছিল। 1990 সালে, স্ট্যান্ডার্ডে ছোটখাটো পরিবর্তন করার পরে, এটি ইন্টারন্যাশনাল অর্গানাইজেশন ফর স্ট্যান্ডার্ডাইজেশন ISO দ্বারা গৃহীত হয়েছিল। তারপরে এটি ISO/IEC 9899:1990 কোডের অধীনে পরিচিত হয়ে ওঠে, কিন্তু প্রোগ্রামারদের মধ্যে স্ট্যান্ডার্ড গৃহীত বছরের সাথে যুক্ত নামটি আটকে যায়: C90। স্ট্যান্ডার্ডের সর্বশেষ সংস্করণ হল ISO/IEC 9899:1999, C99 নামেও পরিচিত, যা 2000 সালে গৃহীত হয়েছিল।

C99 স্ট্যান্ডার্ডের উদ্ভাবনগুলির মধ্যে, ভেরিয়েবলের ঘোষণার স্থান সম্পর্কিত নিয়মের পরিবর্তনের দিকে মনোযোগ দেওয়া উচিত। এখন নতুন ভেরিয়েবল কোডের মাঝখানে ঘোষণা করা যেতে পারে, এবং শুধুমাত্র একটি যৌগিক ব্লকের শুরুতে বা বিশ্বব্যাপী সুযোগে নয়।

C99 এর কিছু বৈশিষ্ট্য:

ইনলাইন ফাংশন (ইনলাইন);
যেকোনো প্রোগ্রাম টেক্সট স্টেটমেন্টে স্থানীয় ভেরিয়েবলের ঘোষণা (যেমন C++);
নতুন ডেটা টাইপ যেমন লং লং int (32- থেকে 64-বিট সংখ্যার রূপান্তর সহজ করার জন্য), স্পষ্ট বুলিয়ান ডেটা টাইপ _Bool, এবং জটিল সংখ্যাগুলিকে উপস্থাপন করার জন্য জটিল প্রকার;
পরিবর্তনশীল দৈর্ঘ্য অ্যারে;
সীমাবদ্ধ পয়েন্টারগুলির জন্য সমর্থন (সীমাবদ্ধ);
স্ট্রাকচারের সূচনা নামকরণ: struct ( int x, y, z; ) পয়েন্ট = ( .y=10, .z=20, .x=30);
// দিয়ে শুরু হওয়া একক-লাইন মন্তব্যের জন্য সমর্থন, C++ থেকে ধার করা (অনেক C কম্পাইলার তাদের পূর্বে একটি সংযোজন হিসাবে সমর্থন করেছিল);
বেশ কিছু নতুন লাইব্রেরি ফাংশন যেমন snprintf;
বেশ কিছু নতুন হেডার ফাইল, যেমন stdint.h.

C99 মান এখন সমস্ত আধুনিক C কম্পাইলার দ্বারা বৃহত্তর বা কম পরিমাণে সমর্থিত। আদর্শভাবে, মান মেনে এবং হার্ডওয়্যার এবং সিস্টেম-নির্ভর কল ব্যবহার না করে সি-তে লেখা কোড হার্ডওয়্যার এবং প্ল্যাটফর্ম স্বাধীন কোড হয়ে ওঠে।

2007 সালে, পরবর্তী সি ভাষার মান নিয়ে কাজ শুরু হয়। 8 ডিসেম্বর, 2011-এ, সি ভাষার জন্য একটি নতুন মান প্রকাশিত হয়েছিল (ISO/IEC 9899:2011)। নতুন স্ট্যান্ডার্ডের কিছু বৈশিষ্ট্য ইতিমধ্যেই GCC এবং Clang কম্পাইলার দ্বারা সমর্থিত।

C11 এর প্রধান বৈশিষ্ট্য:

মাল্টিথ্রেডিং সমর্থন;
উন্নত ইউনিকোড সমর্থন;
সাধারণীকৃত ম্যাক্রো (টাইপ-জেনারিক এক্সপ্রেশন, স্ট্যাটিক ওভারলোডিংয়ের অনুমতি দেয়);
বেনামী স্ট্রাকচার এবং ইউনিয়ন (নেস্টেড স্ট্রাকচারে অ্যাক্সেস সহজ করুন);
বস্তুর প্রান্তিককরণ নিয়ন্ত্রণ;
স্ট্যাটিক দাবী;
বিপদজনক গেটস ফাংশন অপসারণ (সেফ গেটস এর পক্ষে);
ফাংশন quick_exit;
ফাংশন স্পেসিফায়ার _নরেটার্ন;
নতুন এক্সক্লুসিভ ফাইল খোলার মোড।

'11 স্ট্যান্ডার্ডের অস্তিত্ব থাকা সত্ত্বেও, অনেক কম্পাইলার এখনও C99 সংস্করণগুলিকে সম্পূর্ণরূপে সমর্থন করে না।

কেন শির সমালোচনা করা হয়

এটি প্রবেশের জন্য একটি মোটামুটি উচ্চ বাধা রয়েছে, যা প্রথম প্রোগ্রামিং ভাষা হিসাবে শিক্ষাদানে ব্যবহার করা কঠিন করে তোলে। সি তে প্রোগ্রামিং করার সময়, বিবেচনা করার জন্য অনেকগুলি বিবরণ রয়েছে। উইকিপিডিয়া লিখেছেন, "হ্যাকারদের পটভূমি থেকে জন্ম নেওয়া, এটি এমন একটি প্রোগ্রামিং শৈলীকে উত্সাহিত করে যা প্রায়শই অনিরাপদ এবং জটিল কোড লেখাকে উত্সাহিত করে।"

পিটার ময়লান গভীরতর এবং যুক্তিযুক্ত সমালোচনা প্রকাশ করেছেন। তিনি শির সমালোচনা করার জন্য 12 পৃষ্ঠা উত্সর্গ করেছিলেন। এখানে কয়েকটি স্নিপেট রয়েছে:

মডুলারিটির সমস্যা
সি-তে মডুলার প্রোগ্রামিং সম্ভব, কিন্তু শুধুমাত্র যদি প্রোগ্রামার বেশ কিছু কঠোর নিয়ম মেনে চলে:

প্রতিটি মডিউলের জন্য ঠিক একটি হেডার ফাইল থাকতে হবে। এটিতে শুধুমাত্র রপ্তানিযোগ্য ফাংশন প্রোটোটাইপ, বিবরণ এবং অন্য কিছু (মন্তব্য ছাড়া) থাকা উচিত।

বাহ্যিক কলিং পদ্ধতি শুধুমাত্র এই মডিউল সম্পর্কে হেডার ফাইলের মন্তব্য জানতে হবে।

অখণ্ডতা পরীক্ষা করতে, প্রতিটি মডিউলকে অবশ্যই তার নিজস্ব হেডার ফাইল আমদানি করতে হবে।

অন্য মডিউল থেকে কোনো তথ্য আমদানি করতে, প্রতিটি মডিউলে অবশ্যই #ইনক্লুড লাইনের পাশাপাশি মন্তব্যগুলিও থাকতে হবে যা ইম্পোর্ট করা হচ্ছে।

ফাংশন প্রোটোটাইপ শুধুমাত্র হেডার ফাইল ব্যবহার করা যেতে পারে. (এই নিয়মটি প্রয়োজনীয় কারণ সি ভাষার কোনও ফাংশনটি তার প্রোটোটাইপের মতো একই মডিউলে প্রয়োগ করা হয়েছে কিনা তা পরীক্ষা করার জন্য কোনও ব্যবস্থা নেই; তাই একটি প্রোটোটাইপ ব্যবহার করে একটি "অনুপস্থিত ফাংশন" ত্রুটি মাস্ক করতে পারে।)

একটি মডিউলে যেকোন গ্লোবাল ভেরিয়েবল, এবং হেডার ফাইলের মাধ্যমে আমদানি করা ব্যতীত অন্য যেকোন ফাংশনকে অবশ্যই স্ট্যাটিক ঘোষণা করতে হবে।

কম্পাইলার সতর্কতা "প্রোটোটাইপ ছাড়া ফাংশন কল" প্রদান করা উচিত; যেমন একটি সতর্কতা সবসময় একটি ত্রুটি বিবেচনা করা উচিত.

প্রোগ্রামারকে অবশ্যই নিশ্চিত করতে হবে যে হেডার ফাইলে নির্দিষ্ট করা প্রতিটি প্রোটোটাইপ একই মডিউলে একই নামের অধীনে বাস্তবায়িত একটি নন-প্রাইভেট (অর্থাৎ, সাধারণ C পরিভাষায় অ-স্থির) ফাংশনের সাথে মিলে যায়। দুর্ভাগ্যবশত, সি ভাষার প্রকৃতি এই অসম্ভবের জন্য স্বয়ংক্রিয় পরীক্ষা করে তোলে।

আপনি grep এর কোনো ব্যবহার সন্দেহ করা উচিত. প্রোটোটাইপ সঠিক জায়গায় না থাকলে, এটি সম্ভবত একটি ত্রুটি।

আদর্শভাবে, একই দলে কর্মরত প্রোগ্রামারদের একে অপরের উত্স ফাইলগুলিতে অ্যাক্সেস থাকা উচিত নয়। তাদের শুধুমাত্র অবজেক্ট মডিউল এবং হেডার ফাইল শেয়ার করা উচিত।

স্পষ্ট অসুবিধা হল যে খুব কম লোকই এই নিয়মগুলি অনুসরণ করবে, কারণ কম্পাইলারকে তাদের কঠোরভাবে অনুসরণ করার প্রয়োজন নেই। একটি মডুলার প্রোগ্রামিং ভাষা অন্তত আংশিকভাবে ভাল প্রোগ্রামারদের খারাপ প্রোগ্রামারদের তৈরি করা বিশৃঙ্খলা থেকে রক্ষা করে। কিন্তু সি ভাষা এটা করতে পারে না।



ছবি smartagilee.com থেকে
পয়েন্টার নিয়ে সমস্যা
ডেটা স্ট্রাকচারের তত্ত্ব এবং অনুশীলনে সমস্ত অগ্রগতি সত্ত্বেও, পয়েন্টারগুলি প্রোগ্রামারদের জন্য একটি বাস্তব হোঁচট খেয়ে থাকে। পয়েন্টারগুলির সাথে কাজ করা একটি প্রোগ্রাম ডিবাগ করার জন্য ব্যয় করা সময়ের একটি উল্লেখযোগ্য অংশের জন্য অ্যাকাউন্ট, এবং তারাই বেশিরভাগ সমস্যা তৈরি করে যা এর বিকাশকে জটিল করে তোলে।

আপনি গুরুত্বপূর্ণ এবং গুরুত্বহীন পয়েন্টারের মধ্যে পার্থক্য করতে পারেন। আমাদের বোঝার জন্য গুরুত্বপূর্ণ হল ডেটা কাঠামো তৈরি এবং বজায় রাখার জন্য প্রয়োজনীয় পয়েন্টার।

একটি পয়েন্টার গুরুত্বহীন বলে মনে করা হয় যদি এটি ডেটা কাঠামো বাস্তবায়নের জন্য প্রয়োজনীয় না হয়। একটি সাধারণ সি প্রোগ্রামে, গুরুত্বপূর্ণগুলির চেয়ে অনেক বেশি গুরুত্বহীন পয়েন্টার রয়েছে। এই জন্য দুটি কারণ আছে।

প্রথমটি হল যে প্রোগ্রামারদের মধ্যে সি ভাষা ব্যবহার করে, পয়েন্টার তৈরি করা একটি ঐতিহ্য হয়ে উঠেছে এমনকি যেখানে অন্যান্য অ্যাক্সেসের পদ্ধতিগুলি যেগুলি তাদের থেকে কোন ভাবেই নিকৃষ্ট নয় ইতিমধ্যেই বিদ্যমান, উদাহরণস্বরূপ, অ্যারে উপাদানগুলি দেখার সময়।

দ্বিতীয় কারণটি হল সি ভাষার নিয়ম, যা অনুসারে সমস্ত ফাংশন প্যারামিটার মান দ্বারা পাস করা আবশ্যক। আপনার যখন প্যাসকেল ভিএআর বা অ্যাডা ইনআউটের সমতুল্য প্রয়োজন, তখন একমাত্র সমাধান হল একটি পয়েন্টার পাস করা। এটি মূলত সি প্রোগ্রামগুলির দুর্বল পাঠযোগ্যতা ব্যাখ্যা করে।

ইনপুট/আউটপুট প্যারামিটার হিসাবে একটি গুরুত্বপূর্ণ পয়েন্টার পাস করার প্রয়োজন হলে পরিস্থিতি আরও খারাপ হয়। এই ক্ষেত্রে, ফাংশন একটি পয়েন্টার একটি পয়েন্টার পাস করা আবশ্যক, যা এমনকি সবচেয়ে অভিজ্ঞ প্রোগ্রামারদের জন্য অসুবিধা সৃষ্টি করে.

সি - জীবিত

2016 সালের জুনের তথ্য অনুসারে, টিআইওবিই সূচক, যা প্রোগ্রামিং ভাষার জনপ্রিয়তা বৃদ্ধির পরিমাপ করে, দেখায় যে সি দ্বিতীয় স্থানে রয়েছে:

কেউ বলুক যে C পুরানো, এর ব্যাপক ব্যবহার ভাগ্য এবং সক্রিয় PR এর পরিণতি। কেউ বলুক যে ইউনিক্স না থাকলে সি ভাষা কখনই তৈরি হত না। ট্যাগ যুক্ত

লিরিকাল ভূমিকা.
কম্পিউটার সায়েন্স অনুষদে এমন একটি বিষয় রয়েছে: YaSiTP (সি ভাষা এবং প্রোগ্রামিং তত্ত্ব)। আইএসআইটি শিক্ষার্থীরা তাদের তৃতীয় বর্ষে এটি অধ্যয়ন করে এবং একটি নিয়ম হিসাবে, এটির সাথে কোনও বিশেষ সমস্যা নেই। এবং IC সহ দুর্ভাগা ছাত্ররা এটির সাথে প্রোগ্রামিং অধ্যয়ন শুরু করতে বাধ্য হয় - বিশ্ববিদ্যালয়ে তাদের থাকার প্রথম সপ্তাহ থেকে। সবকিছু ঠিকঠাক হবে - যদি স্কুলে একজন ছাত্র কম্পিউটার বিজ্ঞান অন্তত সামান্য অধ্যয়ন করে এবং প্যাসকেলের সাথে ভালভাবে পরিচিত হয় - তবে সে সিনট্যাক্স শিখবে এবং ভাষা এবং বিচ্ছিন্ন ভাষা দ্বারা চালিত হতে থাকবে। আপনি যদি না শিখিয়ে থাকেন এবং জানেন না তাহলে কি হবে? যে, এমনকি সম্পূর্ণরূপে?
তাহলে আপনার ব্যবসা আবর্জনা\খারাপ।
প্রথম: খলেবোস্ট্রয়েভের বক্তৃতার সময় ঘুমাবেন না। চতুর্থ জোড়ায় তার পরিমাপিত কণ্ঠে ঘুমিয়ে না পড়ার চেয়ে কঠিন কাজ আর কিছু নেই, কিন্তু... এটা সব আপনার উপর নির্ভর করে।
দ্বিতীয়: একটি বই পড়া শুরু করুন, উদাহরণস্বরূপ http://www.ph4s.ru/bookprogramir_1.html সেখানে আপনি বোগাটাইরেভের বই "প্রোগ্রামিং এর জন্য একটি সম্পূর্ণ ইডিয়টস গাইড" বা আপনার পছন্দের অন্য কিছু পাবেন।
তৃতীয় এবং সম্ভবত সবচেয়ে গুরুত্বপূর্ণ: অনুশীলন। যা আমি সম্পর্কে কথা বলতে হবে.
আপনি বাড়িতে কিছু লেখার চেষ্টা করার আগে, আপনাকে সঠিক স্টুডিও সেট আপ করতে হবে। প্রায় সমস্ত MKN 2012-এর অভিজ্ঞতার ভিত্তিতে, Vidul Studio 2010 C++ Express-এর সেট কাজ করছে না। ইউনিভার্সিটিতে কম্পিউটারে কী নিখুঁতভাবে লেখা আছে, তিনি সংশোধনের সম্ভাবনা ছাড়াই একটি ত্রুটি সহ পড়েন। কেন আমাদের কোন ব্যবসা নয়, আমরা ভিজ্যুয়াল স্টুডিও 2010 (2012) আলটিমেট (ভিজ্যুয়াল স্টুডিও আলটিমেট 2012) খুঁজছি। উদাহরণস্বরূপ এখানে: http://www.microsoft.com/visualstudio/ru...। আমরা ট্রায়াল সংস্করণ ইনস্টল করি, যার পরে আপনি অনুশীলন শুরু করতে পারেন।

(নোট 1:
ফাইল - অতিরিক্ত সেভিং প্যারামিটার - সিরিলিক ডক। তারপর কনসোল স্বাভাবিকভাবে রাশিয়ান অক্ষর পড়বে।

দ্রষ্টব্য 2: উপস্থাপিত কোড থেকে একটি পূর্ণাঙ্গ প্রোগ্রাম পেতে, আপনাকে ভিজ্যুয়াল স্টুডিওতে একটি নতুন প্রকল্প তৈরি করতে হবে, "খালি প্রকল্প" আইটেমটি নির্বাচন করতে হবে, "সোর্স কোড ফাইল" ফোল্ডারে প্রকল্পের নাম উল্লেখ করতে হবে। , একটি নতুন উপাদান "C++ ফাইল" যোগ করতে ডান-ক্লিক করুন, ফলাফল উইন্ডোতে আমার কোডটি অনুলিপি করুন এবং এটি কম্পাইল করুন (কন্ট্রোল কী + F5), এবং তারপরে নিজের মতো কিছু লেখার চেষ্টা করুন।)

অনুশীলন করা.
প্রোগ্রামিং ক্লাসিকভাবে একটি মৌলিক "হ্যালো ওয়ার্ল্ড!" লেখার সাথে শুরু হয়।
ফোরামে C++ ব্যতীত বিভিন্ন ভাষায় এই প্রোগ্রাম সম্পর্কে বিভিন্ন থ্রেড রয়েছে, তাই এখানে কোডটি রয়েছে:

#include "stdio.h" #include "conio.h" int main(int argc, char* argv) ( printf("হ্যালো, ওয়ার্ল্ড!\n"); )

এই ধরণের কয়েকটি সাধারণ প্রোগ্রাম লেখার জন্যও এটি দরকারী (উদাহরণস্বরূপ, এটি আগে থেকে জানা ডেটা সহ একটি সমীকরণের ফলাফল প্রদর্শন করে):

// #tytyty.cpp: কনসোল অ্যাপ্লিকেশনের জন্য এন্ট্রি পয়েন্ট সংজ্ঞায়িত করে। // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv) ( int x , y , z; x = 9; y = 4; z = x*y; printf("%d", z) ;)

তারপর আরও জটিল (এই প্রোগ্রামটি দুটি ইনপুট মান পড়ে এবং প্রবেশ করা মানগুলির সাথে একটি সমীকরণের ফলাফল দেয়):

#অন্তর্ভুক্ত করুন "stdio.h" void main() (int x , y , z; scanf("%d, %d", &x, &y); z = x*y; printf("%d", z); )

"হ্যালো ওয়ার্ল্ড!" এর পরে শিক্ষকের দেওয়া পরবর্তী প্রোগ্রামটি আমার কাছে এইরকম ছিল:
শর্ত: একটি বর্গক্ষেত্র এবং এটিতে একটি বৃত্ত খোদাই করা আছে। বর্গক্ষেত্রের দিকটি জানা থাকলে বৃত্তের বাইরে অবশিষ্ট বর্গক্ষেত্রের অর্ধেক ক্ষেত্রফল খুঁজুন।
সমাধান:

#include "stdio.h" #include "math.h" #সংজ্ঞায়িত করুন PI 3.1415926535897932384626433832795 void main() ( double x; printf("বর্গ x = "এর পাশের মান লিখুন); scanf("%lf", &x ডবল y = x * x ডাবল z = (f - z) / 2;

ধ্রুবক লাইব্রেরি ব্যবহার করে একটি বিকল্প হিসাবে:

#সংজ্ঞায়িত করুন _USE_MATH_DEFINES #include "stdio.h" #include "math.h" void main() ( double x; printf("x = "); scanf("%lf", &x); ডবল y = x / 2; ডবল f = x * x; ডাবল z = M_PI * y * y = (f - z) / 2;

টাস্ক দুই থেকে পাঁচ নম্বর প্রোগ্রাম। শর্ত: নির্দিষ্ট সহগ সহ একটি দ্বিঘাত সমীকরণ সমাধান করুন।
বাস্তবায়ন:

#include "stdio.h" #include "math.h" #include "conio.h" int main() ( float x , x1, sq, a, b, c; printf("Vvedite znachenija a, b, c: "); scanf("%f, %f, %f", &a, &b, &c); if (a == 0) ( x = - c / b; printf("%f", x); ) অন্য ( float k; k = b * b - 4 * a * c; যদি (k< 0) { printf("Kornei net!"); } else if (k == 0) { x = - b / (2 * a); printf("%f", x); } else { sq = sqrt(k); x = (-b + sq) / (2 * a); x1 = (-b - sq) / (2 * a); printf("%f, %f", x, x1); } } getch(); return 0; }

(মনোযোগ!! লাইব্রেরি নির্দিষ্ট করার সময়, চিহ্নের চেয়ে বড়/কম এর পরিবর্তে, উদ্ধৃতি সর্বত্র নির্দেশিত হয়)

AFTERWORD: অন্যান্য কাজ পরে যোগ করা হবে.

C++ প্রোগ্রামিং ভাষা(উচ্চারিত "si plus plus") একটি বহু-প্যারাডাইম প্রোগ্রামিং ভাষা যা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংকে সমর্থন করে। বেল ল্যাবসের Bjarne Stroustrup 1980-এর দশকে C++ প্রোগ্রামিং ভাষা তৈরি করেছিল, C প্রোগ্রামিং ভাষাকে ভিত্তি হিসেবে ব্যবহার করে। C এর ব্যাপক জনপ্রিয়তার জন্য ধন্যবাদ, C++ প্রোগ্রামিং ভাষা 1990 এর দশকে সবচেয়ে জনপ্রিয় ভাষা হয়ে ওঠে। নতুনদের জন্য প্রোগ্রামিং। এবং এটি আজও বাণিজ্যিক অ্যাপ্লিকেশনগুলিতে খুব ব্যাপকভাবে ব্যবহৃত হয়। C++ প্রোগ্রামিং ভাষা বাণিজ্যিক অ্যাপ্লিকেশনে C প্রতিস্থাপন করেছে কারণ এটি প্রোগ্রামারদের তাদের C রুট (উদাহরণস্বরূপ, প্লেইন সি-তে লেখা লাইব্রেরি) পরিত্যাগ না করেই ক্রমবর্ধমান জটিলতার সিস্টেম তৈরি করতে দেয়। অবজেক্ট-ওরিয়েন্টেড ডিজাইনের পাশাপাশি, আজকের C++ জেনেরিক প্রোগ্রামিং এবং টেমপ্লেট মেটাপ্রোগ্রামিং এর সমর্থনে C থেকে আলাদা। এটি টাইপ উপনাম, ইনলাইন এক্সটেনশন, টেমপ্লেট এবং // মন্তব্য-শৈলী মন্তব্যের মাধ্যমে বাস্তবায়িত হয় (যদিও মনে রাখবেন যে C পরবর্তীতে // মন্তব্যটি গ্রহণ করেছে)। ডামি জন্য প্রোগ্রামিং.

C++ এর ইতিহাস
Stroustrup 1979 সালে একটি প্রোগ্রামিং ফ্রেমওয়ার্ক হিসাবে Simula67 দ্বারা অনুপ্রাণিত হয়ে ভাষার উপর কাজ শুরু করে। AT&T প্রথম ভাষাটি 1983 সালের আগস্টে ব্যবহার করে। আসল কম্পাইলারকে বলা হত Cfront। প্রথম বাণিজ্যিক মুক্তি অক্টোবর 1985 সালে ঘটেছে। 1998 সালে ISO/IEC 14882-1998 দ্বারা C++ প্রমিত করা হয়েছিল।

"C++" নামের ইতিহাস
এই শিরোনামটি Rick Mascitti (1983 সালের মাঝামাঝি) এর অন্তর্গত এবং 1983 সালের ডিসেম্বরে প্রথম ব্যবহার করা হয়েছিল। এর আগে, ভাষার গবেষণা ও বিকাশের সময় এটিকে "ক্লাস সহ সি" বলা প্রচলিত ছিল। চূড়ান্ত নামটি আসে C এবং "++" অপারেটর থেকে (যা একটি পরিবর্তনশীলের মান এক দ্বারা বৃদ্ধি করে) এবং একটি কম্পিউটার প্রোগ্রামের উন্নত ক্ষমতা নির্দেশ করতে "+" সহ সাধারণ নামকরণ, উদাহরণস্বরূপ: "উইকিপিডিয়া +"। (সহজভাবে বলতে গেলে, প্লাস চিহ্নের অর্থ হল প্রোগ্রামের উন্নতি করা এবং এটিকে নতুন কার্যকারিতা দেওয়া) স্ট্রস্ট্রুপের মতে: "এই নামের অর্থ হল C থেকে পরিবর্তনের বিবর্তনীয় প্রকৃতি।" যদিও বেশিরভাগ C কোড C++ এর জন্য বৈধ, C C++ এর উপসেট নয়।
কিছু সি প্রোগ্রামার উল্লেখ করেছেন যে আপনি যদি x=3 ঘোষণা করেন; এবং y=x++; তারপর x= 4 এবং y = 3 চালানো হলে; যেহেতু x এর মান y ধার্য করার পরে বৃদ্ধি করা হয়। যাইহোক, আপনি যদি y=++x লেখেন; , তারপর y=4 এবং x=4।
এই বিবেচনার পরে, C++ এর জন্য আরও উপযুক্ত নাম হতে পারে ++C। যাইহোক, C++ এবং ++C হল C এর এক্সটেনশন, তাই C++ ফর্মটি ++C এর চেয়ে বেশি সাধারণ।
পেডেন্টরা লক্ষ্য করতে পারে যে C++ প্রবর্তনের পরে, C ভাষাটি নিজের পরিবর্তন করেনি এবং সবচেয়ে সঠিক নাম হতে পারে "C +1"।

C++ মালিকানা
কেউ C++ কথা বলে না। Stroustrup এবং AT&T C++ ব্যবহারের জন্য কোনো রয়্যালটি পায় না।

প্রোগ্রাম "হ্যালো উইকিপিডিয়া!"
নীচের কোডটি একটি প্রোগ্রামে কম্পাইল করা যেতে পারে যা বার্তাটির পাঠ্য মুদ্রণ করে।

অন্তর্ভুক্ত করুন // std::cout // main() ফাংশনের সূচনা int main(int argc, const char**argv) ( // (... ) কোড std: এর ব্লকগুলি অন্তর্ভুক্ত করতে ব্যবহার করা হয়: cout<< "Hello, Wikipedia!\n"; // Outputs the text enclosed by "" return 0; }

ক্লাস সংজ্ঞা

std::string ব্যবহার করে অন্তর্ভুক্ত করুন; ক্লাস InetMessage ( string m_subject, m_to, m_from; পাবলিক: InetMessage (const string& subject, const string& to, const string& from); স্ট্রিং বিষয় () const; স্ট্রিং থেকে () const; স্ট্রিং থেকে () const; );

C++ লাইব্রেরি
সি++ স্ট্যান্ডার্ড লাইব্রেরিগুলি বেশিরভাগই সি স্ট্যান্ডার্ড লাইব্রেরির একটি সুপারসেট। STL দরকারী টুল প্রদান করে যেমন ইটারেটর (যা উচ্চ-স্তরের পয়েন্টারের মতো) এবং কন্টেইনার (যা অ্যারের মতো যা স্বয়ংক্রিয়ভাবে নতুন উপাদান অন্তর্ভুক্ত করতে বৃদ্ধি পেতে পারে)। C এর মতো, লাইব্রেরি অ্যাক্সেস বৈশিষ্ট্যটি স্ট্যান্ডার্ড হেডার ফাইলগুলি অন্তর্ভুক্ত করার জন্য #include নির্দেশিকা ব্যবহার করে ঘটে। C++ পঞ্চাশটি অ-বঞ্চিত স্ট্যান্ডার্ড হেডার প্রদান করে।

ভাষার ভবিষ্যৎ
C++ প্রোগ্রামিং ভাষা ক্রমবর্ধমান চাহিদা মেটাতে বিকশিত হচ্ছে। আজ অবধি, কম্পাইলার এবং ডেভেলপমেন্ট এনভায়রনমেন্ট ডেভেলপাররা সমস্ত C++ বৈশিষ্ট্য সমর্থন করার জন্য সংগ্রাম চালিয়ে যাচ্ছে (প্রায় 2004), একটি পরিস্থিতি যা 1998 এবং 2003 এর মধ্যে উল্লেখযোগ্যভাবে উন্নতি করেছে। বিশেষ করে একটি গ্রুপ, Boost.org, C++ প্রোগ্রামিং ল্যাঙ্গুয়েজ তৈরি করার জন্য অনেক প্রচেষ্টা করেছে যা আমরা আজ জানি এবং স্ট্যান্ডার্ড কমিটিকে সেই বৈশিষ্ট্যগুলির বিষয়ে পরামর্শ দিয়েছে যেগুলি কাজ করে এবং যেগুলির উন্নতি প্রয়োজন। চলমান কাজ ইঙ্গিত দেয় যে C++ এর বহু-দৃষ্টান্তের প্রকৃতিকে আরও বেশি করে গড়ে তুলবে। Boost.org-এ হোস্ট করা কাজগুলি, উদাহরণস্বরূপ, C++ প্রোগ্রামিংয়ের কার্যকরী এবং মেটা ক্ষমতা উল্লেখযোগ্যভাবে প্রসারিত করে। C++ এর এখনও ভেরিয়েবল এবং ফাংশন নামকরণের কোনো মান নেই, যা বিভিন্ন কম্পাইলার দ্বারা উত্পাদিত কোডকে বেমানান করে তোলে।



শেয়ার করুন