সি (প্রোগ্রামিং ভাষা)

উইকিপিডিয়া, মুক্ত বিশ্বকোষ থেকে
সি
The C Programming Language logo.svg
দ্যা সি প্রোগ্রামিং ল্যাঙ্গুয়েজ, ব্রায়ান কার্নিগানডেনিস রিচি-র লেখা মূল সংস্করণের প্রচ্ছদ; এই বইটি সুদীর্ঘ সময় ধরে ভাষাটির একটি অ-প্রমিত বিবরণ হিসেবে ধরা হত।
দ্যা সি প্রোগ্রামিং ল্যাঙ্গুয়েজ[১](প্রায়শই কেএন্ডআর হিসাবে উল্লেখ করা হয়), সি প্রগ্রামিং ভাষার মূল বই।
প্যারাডাইমনির্দেশমূলক (পদ্ধতিমূলক) সিস্টেম্‌স বাস্তবায়ন ভাষা
নকশাকারডেনিস রিচি
বিকাশকারীডেনিস রিচি এবং বেল ল্যাব্‌স
প্রথম প্রদর্শিত১৯৭২
ধরণের শৃঙ্খলাস্থির, দুর্বল
মুখ্য বাস্তবায়নসমূহ
ক্ল্যাং, জিসিসি, মাইক্রোসফট ভিজুয়্যাল সি/সি++, বোরল্যান্ড সি, ওয়াটকম সি
যার দ্বারা প্রভাবিত
বি (বিসিপিএল, সিপিএল), অ্যালগল ৬৮, অ্যাসেম্বলি ভাষা
যাকে প্রভাবিত করেছে
অক, সি শেল, সি++, সি শার্প, অবজেক্টিভ সি, বিটসি, ডি, কনকারেন্ট সি, জাভা, জাভাস্ক্রিপ্ট, লিম্বো, পার্ল, পিএইচপি

সি একটি প্রোগ্রামিং ভাষা। সি নির্মাণ করেন ডেনিস রিচি, বেল ল্যাবে '৭০এর দশকে কাজ করার সময়। ভাষাটি তৈরির প্রথম উদ্দেশ্য ছিল ইউনিক্স অপারেটিং সিস্টেম এর কোড লেখা, কিন্তু অচিরেই এটি একটি বহুলব্যবহৃত ভাষায় পরিণত হয়। সি++জাভাসহ পরিবর্তীকালের অনেক প্রোগ্রামিং ভাষার উপর সি'র গভীর প্রভাব পড়েছে। সি'র সবচেয়ে আকর্ষণীয় দিক হচ্ছে এর বহনযোগ্যতা (portability)। সি'তে রচিত প্রোগ্রাম যেকোনো অপারেটিং সিস্টেমের কম্পিউটারে চালানো যায়। ৭০ এবং ৮০র দশকের দিকে সি এর জনপ্রিয়তা বৃদ্ধি পাবার সাথে সাথে এর অনেকগুলো সংস্করণ তৈরি হয়। ১৯৮৩ সালে মার্কিন মাননিয়ন্ত্রক সংস্থা সি এর একটি আদর্শ সংস্করণ তৈরির জন্য কমিটি গঠন করে। দীর্ঘ ৬ বছর পরে ১৯৮৯ সালে সেই আদর্শ সি ভাষাটি তৈরি হয়, যা আমেরিকান মাননিয়ন্ত্রক সংস্থার সি (আনসি সি (ANSI C)) নামে পরিচিত। পরবর্তিতে আন্তর্জাতিক মাননিয়ন্ত্রক সংস্থা ১৯৯০ সালে সি এর এই আদর্শ সংস্করণটি গ্রহণ করে, যা সি৯০ নামে পরিচিত। মূলত "সি৮৯" এবং "সি৯০" একই ভাষা। যুগের প্রয়োজনে আন্তর্জাতিক মাননিয়ন্ত্রক সংস্থা ১৯৯৫ সালে এই সংস্করণকে বর্ধিত করে এবং পরবর্তিতে ১৯৯৯ সালে সম্পূর্ণ নতুন একটি সংস্করণ প্রকাশ করে যা সি৯৯ নামে পরিচিত। সর্বশেষ ২০১১ সালে সি প্রোগ্রামিং ল্যাঙ্গুয়েজের নবীনতম সংস্করণ সি১১ প্রকাশিত হয়।

উৎপত্তি[সম্পাদনা]

১৯৬০-এর দশকে বেশ কিছু কম্পিউটার প্রোগ্রামিং ভাষা তৈরি করা হয়েছিল। মার্কিন কম্পিউটারবিদ গ্রেস হপার Mathematic, Flowmatic এবং A2 নামে তিনটি প্রোগ্রামিং ভাষা উদ্ভাবন করেন। এরপর জেম্‌স ব্যাকাস তৈরি করেন ForTran। তারও পরে ALGOL, COBOL, Ada ইত্যাদি প্রোগ্রামিং ভাষা উদ্ভাবন করা হয়। মূলত এই ভাষাগুলিই আধুনিক প্রোগ্রামিং ভাষাগুলির পূর্বসূরী। কিন্তু ঐ ভাষাগুলিকে ভিন্ন ভিন্ন কাজে ব্যবহার করা হত। তাই কম্পিউটার বিজ্ঞানীরা এমন একটি প্রোগ্রামিং ভাষার কথা ভাবতে থাকেন যার মাধ্যমে সব ধরনের সফটওয়্যার তৈরি করা সম্ভব হবে। এরই ফলশ্রুতিতে বিজ্ঞানীরা তৈরি করেন ALGOL 60 (Algorithmic Language) এবং এরপর Combined Programming Language (CPL), কিন্তু CPL শেখা এবং ব্যবহার করা ছিল বেশ কঠিন। তাই এটা জনপ্রিয়তা পায়নি।

কেমব্রিজ বিশ্ববিদ্যালয় এর মার্টিন রিচার্ড CPL কে ভিত্তি করে ১৯৬৭ সালে তৈরি করেন Basic Combined Programming Language (BCPL) কিন্তু এটি ছিল মূলত Less Powerful to Specific এবং টাইপবিহীন একটি প্রোগ্রামিং ভাষা।

এ সময়েই যুক্তরাষ্ট্রের বেল গবেষণাগারে বিজ্ঞানী টমসন তৈরি করেন বি (B) নামক একটি প্রোগ্রামিং ভাষা; এটি ছিল পূর্বের BCPL-এর একটি উন্নত সংস্করণ। ডেনিস রিচি পরবর্তীতে B এবং BCPL অনুসরণ করেন এবং নিজে থেকে আরো কিছু কৌশল ব্যবহার করে তৈরি করেন "সি" (C)। মূলত B-এর সীমাবদ্ধতা গুলো দূর করার উদ্দেশ্যেই "সি" এর উৎপত্তি।

ইতিহাস[সম্পাদনা]

প্রারম্ভিক উন্নয়ন[সম্পাদনা]

সি ভাষা বিকাশের সময়রেখা
বছর সি স্টান্ডার্ড [২]
১৯৭২ জন্ম
১৯৭৮ কে আন্ড আর সি
১৯৮৯/১৯৯০ ANSI C and ISO C
১৯৯৯ সি৯৯
২০১১ সি১১
2017 সি১৭
টিবিডি সি2x

সি-এর উৎপত্তি, উনিক্স অপারেটিং সিস্টেমের বিকাশের সাথে অতোপ্রতোভাবে জড়িত, যা মূলত ডেনিস রিচি এবং কেন থম্পসন ও তাদের সহকর্মীদের বিভিন্ন ধারণাকে কাজে কাজে লাগিয়ে PDP-7-এ প্রয়োগ করা হয়। অবশেষে, তারা অপারেটিং সিস্টেমটিকে PDP-11-এ পোর্ট করার সিদ্ধান্ত নেয়। ইউনিক্সের আসল PDP-11 সংস্করণটিও অ্যাসেম্বল ভাষায় তৈরি করা হয়েছিল।[৩]

থমসন নতুন প্লাটফর্মটির জন্য কার্যকারি কিছু তৈরি করতে চেয়েছিলেন। প্রথমে, তিনি একটি ফোরট্রান কম্পাইলার তৈরি করার চেষ্টা করেছিলেন, কিন্তু শীঘ্রই ধারণাটি বাদ দেন। পরিবর্তে, তিনি সম্প্রতিক আবিষ্কৃত বিসিপিএল সিস্টেম প্রোগ্রামিং ভাষা-এর সাহায্যে একটি স্বল্প খরচের সংস্করণ তৈরি করেন। তখনও বিসিপিএলের অফিসিয়াল বিবরণ পাওয়া যায়নি, এবং থম্পসন সিনট্যাক্স গুলোকে যতটা কম শব্দের সাহায্যে লেখা যায়,[৪] সেভাবে লিখেছিলেন যা সরলীকৃত ALGOL যা SMALGOL নামে পরিচিত, এর মতো ছিলো। [৫]

কে অ্যান্ড আর সি[সম্পাদনা]

"দ্যা সি প্রোগ্রামিং ল্যাঙ্গুয়েজ" বইটির প্রচ্ছদ, প্রথম সংস্করণ, ব্রায়ান কার্নিঘান এবং ডেনিস রিচি

১৯৭৮ সালে, ব্রায়ান কার্নিঘান এবং ডেনিস রিচি দ্যা সি প্রোগ্রামিং ল্যাঙ্গুয়েজ এর প্রথম সংস্করণ প্রকাশ করেন।[১] এই বইটি, যা সি প্রোগ্রামারদের কাছে K&R নামে পরিচিত, বহু বছর ধরে এই ভাষার একটি অনানুষ্ঠানিক নির্দেশিকা হিসেবে কাজ করেছে। এটিকে অনেকেই K&R C নামে চেনে। [৬] এই বইটির দ্বিতীয় সংস্করণটি, সি ভাষার ANSI C মান্দন্ডকে মেনে চলে, যা নীচে বর্ণিত হয়েছে।[৭]

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

  • আদর্শ I/O লাইব্রেরি
  • long int ডেটা টাইপ
  • unsigned int ডেটা টাইপ
  • কম্পাউন্ড (যৌগিক) অ্যাসাইনমেন্ট অপারেটর =op (যেমন =-) কে পরিবর্তন করে এরূপ (op=) করা

এমনিকি, ১৯৮৯ সালে ANSI মানদন্ড প্রকাশের পরও অনেক দিন ধরেই K&R C নির্দেশবলী হালনাগাদ করা হয়নি। ফলে, এটি কম্পাইল করতে এখনো অনেক পুরোনো কম্পাইলার ব্যবহৃত হয়।

সি-এর প্রথম দিকের সংস্করণগুলোতে , যে ফাংশনগুলি শুধুমাত্র int ব্যতীত অন্য কোনো টাইপের ডাটা প্রত্যাবর্তন(return) করে তা ঘোষণা করা আবশ্যক, যদি তা ফাংশন লেখার আগে ব্যবহার করা হয়। পূর্বে ডাটা টাইপ ্না বলে দেওয়া হলে, ফাংশন টাইপ ও রিটার্ন টাইপ কম্পাইলার ডিফল্ট হিসাবে int ধরে নেয়। উদাহরণস্বরূপ:

long some_function();
/* int */ other_function();

/* int */ calling_function()
{
    long test1;
    register /* int */ test2;

    test1 = some_function();
    if (test1 > 1)
          test2 = 0;
    else
          test2 = other_function();
    return test2;
}

যে int গুলি কমেন্ট ব্লকের মধ্যে যুক্ত করা হয়েছে তা K&R C-তে বাদ দেওয়া যেতে পারে, কিন্তু পরবর্তীতে এগুলো প্রয়োজন হতে পারে।

K&R C প্রকাশের পরের বছরগুলিতে, AT&T (বিশেষ করে পিসিসি[৮]) এবং কিছু অন্যান্য ভেন্ডার। এর অন্তর্ভুক্ত হলো:

  • voidফাংশন (অর্থাৎ, কোন রিটার্ন ছাড়া ফাংশন)
  • ফাংশন রিটার্নিং structবা unionটাইপ (পয়েন্টারের পরিবর্তে)
  • structডেটা টাইপের জন্য অ্যাসাইনমেন্ট
  • গণনা করার টাইপ

বিপুল সংখ্যক এক্সটেনশন এবং একটি স্ট্যান্ডার্ড লাইব্রেরি-এর শর্তের অভাব, সি ভাষার জনপ্রিয়তা এবং এটাও সত্য যে ইউনিক্স কম্পাইলাররাও K&R স্পেসিফিকেশন সঠিকভাবে প্রয়োগ করেনি, যা তাকে প্রমিতকরণের প্রয়োজনীয়তার দিকে পরিচালিত করে।

সিনট্যাক্স[সম্পাদনা]

কী ওয়ার্ড[সম্পাদনা]

সি প্রোগ্রামিং ভাষায় কীওয়ার্ড বলতে বোঝায় সেইসব সংরক্ষিত শব্দসমূহকে যেগুলো একটি বিশেষ অর্থ প্রকাশ করে। সি৮৯ এ এরকম ৩২টি কীওয়ার্ড আছে।

সি৯৯ এ এরকম আরো পাঁচটি কীওয়ার্ড যুক্ত হয়।

সি১১ তে যুক্ত হয় আরো সাতটি কীওয়ার্ড।

অপারেটর[সম্পাদনা]

সি এর অপারেটরগুলো হল -

  • অ্যারিথমেটিক: +, -, *, /, %
  • অ্যাসাইনমেন্ট: =
  • অগমেন্টেড অ্যাসাইনমেন্ট: +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
  • বিটওয়াইজ লজিক: ~, &, |, ^
  • বিটওয়াইজ শিফট্‌: <<, >>
  • বুলিয়ান লজিক: !, &&, ||
  • কন্ডিশনাল ইভালুয়েশন: ? :
  • ইকুয়ালিটি টেস্টিং: ==, !=
  • কলিং ফাংশন: ( )
  • ইনক্রিমেন্ট ও ডিক্রিমেন্ট অপারেটর: ++, --
  • মেম্বার সিলেকশন: ., ->
  • অবজেক্ট সাইজ: sizeof
  • অর্ডার রিলেশন: <, <=, >, >=
  • রেফারেন্স ও ডিরেফারেন্স: &, *, [ ]
  • সিকুয়েন্সিং: ,
  • সাবএক্সপ্রেসন গ্রুপিং: ( )
  • টাইপ কনভার্সন: (typename)

উদাহরণ কোড[সম্পাদনা]

সি প্রোগ্রামিং ভাষার উদাহরণ : Hello World হল একটি সাধারণ প্রোগ্রামিং কোড যা সকল প্রোগ্রামার প্রোগ্রামিং কোড লিখার সময় লিখে থাকে ।

এই কোডের অংশটুকুতে "main()" নামের ফাংশন লোড হলে একটি লাইনে Hello World লেখা দেখাবে:

main()
{
    printf("'Hello World\n");
}

সি প্রোগ্রামিং কোডের আদর্শ উদাহরণ

#include <stdio.h>
int main(void)
{
    printf("Hello World\n");
    return 0;
}
  • এখানে #include <stdio.h> লিখার মাধ্যমে কম্পেইলার কে stdio.h নামের হেডার ফাইল পড়তে বলা হয়েছে ।
  • int main(void) মানে মূল ফাংশন ইন্টেজার (গাণিতিক পূর্ণ সংখ্যা) প্রদান করবে । আর (void) লিখার কারণে মূল ফাংশনে কোন কিছু ইনপুট করতে হবে না ।
  • printf("Hello World\n") এখানে printf হল একটি ফাংশন যার বিস্তারিত stdio.h হেডার ফাইলের মধ্যে লিখা আছে । সাধারণত printf এর মাধ্যমে স্ট্রিং উপাত্ত কম্পিউটারের পর্দায় দৃশ্যমান করার জন্য ব্যবহার হয় । এর মানে Hello World লিখাটি কম্পিউটারের পর্দায় দৃশ্যমান হবে।

উপাত্তের ধরন[সম্পাদনা]

সি তে উপাত্তের ধরন মুলত তিন প্রকারঃ

  1. ব্যবহারকারী সংজ্ঞায়িত উপাত্তের ধরন
  2. অন্তর্নির্মিত বা বিল্ট ইন উপাত্তের ধরন
  3. উদ্ভূত উপাত্তের ধরন

অন্তর্নির্মিত উপাত্তের ধরন[সম্পাদনা]

ANSI কর্তৃক নির্ধারিত উপাত্তের ধরন সমুহ কে অন্তর্নির্মিত বা বিল্ট ইন উপাত্তের ধরন বা অপরিহার্য উপাত্তের ধরন বলে।

অন্তর্নির্মিত উপাত্তের ধরন সাধারনত ৪ প্রকারঃ

  • ক্যারেক্টার ধরনের উপাত্ত - সাধারনত ক্যারেক্টার বা স্ট্রিং জাতীয় কোন উপাত্ত ঘোষণার জন্য ক্যারেক্টার ধরনের উপাত্ত ব্যবহার করা হয় । ক্যারেক্টার ধরনের উপাত্ত মেমোরিতে ১ বাইট জায়গা দখল করে । কোন উপাত্তকে ক্যারেক্টার হিসাবে ঘোষণা করার জন্য 'char' কীওয়ার্ড ব্যবহৃত হয় যেমনঃ char abc; char xya;। এর বিন্যাস নির্দিষ্টকারী হিসেবে '%c' ব্যবহার করা হয় ।
  • ইন্টিজার ধরনের উপাত্ত - পূর্ণসংখ্যা জাতীয় কোন উপাত্ত ঘোষণার জন্য এই উপাত্তের ধরন ব্যবহার করা হয় । এই উপাত্তের ধরন মেমোরিতে ২ বাইট জায়গা দখল করে । এর কীওয়ার্ড হচ্ছেঃ 'int' । যেমনঃ int abc; int xyz; । বিন্যাস নির্দিষ্টকারী হিসেবে '%d' ব্যবহার করা হয়।
  • ফ্লোটিং পয়েন্ট ধরনের উপাত্ত -
  • দ্বৈত ধরনের উপাত্ত -

পয়েন্টার[সম্পাদনা]

চলক[সম্পাদনা]

অ্যারে[সম্পাদনা]

একই ধরনের বা সমপ্রকৃতির ডেটা টাইপের গুচ্ছকে অ্যারে বলা হয়। [তথ্যসূত্র প্রয়োজন] অ্যারের একটি নির্দিষ্ট নাম থাকে। '[ ]' তৃতীয় বন্ধনীর সাহায্যে অ্যারের নামের সাথে অ্যারে সাইজ লেখা হয়, যা অ্যারে ভেরিয়েবলের(Variable) সর্বোচ্চ ডেটার সংখ্যা নির্দেশ করে। এই সংখ্যাকে অ্যারের ইনডেক্স(Index) বলা হয়। যেমন, একটি অ্যারে— int num[4]; এখানে [4] দ্বারা অ্যারের ইনডেক্স প্রকাশ করে। int num[4]; অ্যারেটিতে মোট পাঁচটি চলক(Variable) আছে। যেমন, ১ম— num[0] , ২য়— num[1] , ৩য়— num[2] , ৪র্থ— num[3] , ৫ম— num[4]

একই ধরণের অনেকগুলো ভেরিয়েবলের জন্য অ্যারে ব্যবহার করা হয়। ধরা যাক, ৬টি সংখ্যার জন্য ৬টি ভেরিয়েবল ঘোষণা করতে হবে। যেমন, int num0, num1, num2, num3, num4, num5; এভাবে ভেরিয়েবল ঘোষণা করা বেশ সময়সাপেক্ষ এবং কষ্টকর। তাই এটাকে সহজ করার জন্য অ্যারে ব্যবহার করা হয়। যেমন, int num[5];

অ্যারে ব্যবহারের সুবিধা[সম্পাদনা]

[তথ্যসূত্র প্রয়োজন]

  • একই ধরনের ডেটাসমূহকে একটি চলক দিয়ে প্রকাশ করা যায়।
  • প্রোগ্রামকে সহজ, সুন্দর ও ছোট করে।
  • প্রোগ্রাম দ্রুত নির্বাহ হয়।
  • অ্যারের উপাদানগুলো মেমোরিতে পাশাপাশি অবস্থান করে।
  • প্রোগ্রামের জটিলতা কমায়।
  • অ্যারে একই ডেটা টাইপ উপাদানগুলিতে ব্যবহৃত হয়।

অ্যারে ব্যবহারের অসুবিধা[সম্পাদনা]

[তথ্যসূত্র প্রয়োজন]

  • প্রোগ্রাম নির্বাহের সময়ে অ্যারের সাইজ কখনো পরিবর্তন করা যায় না।
  • প্রকৃত ডেটা অপেক্ষা অ্যারের সাইজ অনেক বেশি ঘোষণা করা হলে মেমোরির অপচয় হয়।
  • প্রকৃত ডেটা অপেক্ষা অ্যারের সাইজ কম ঘোষণা করা হলে অ্যারেতে ডেটার পর্যাপ্ত স্থান সংকুলান হয়না।
  • বিভিন্ন ধরনের ডেটা অ্যারেতে রাখা যায় না।

তথ্যসূত্র[সম্পাদনা]

[৩]

  1. Kernighan, Brian W; Ritchie, Dennis M. (ফেব্রুয়ারি ১৯৭৮)। দ্যা সি প্রোগ্রামিং ল্যাঙ্গুয়েজ (The C Programming Language) (১ম সংস্করণ)। Englewood Cliffs, NJ: প্রেন্টিস হলআইএসবিএন 978-0-13-110163-0 
  2. "History of C"en.cppreference.com। মে ২৯, ২০১৮ তারিখে মূল থেকে আর্কাইভ করা। সংগ্রহের তারিখ মে ২৮, ২০১৮ 
  3. Ritchie, Dennis M. (মার্চ ১৯৯৩)। "The Development of the C Language"। ACM SIGPLAN Notices। ACM। 28 (3): 201–208। ডিওআই:10.1145/155360.155580 
  4. Ritchie, Dennis। "BCPL to B to C"। ডিসেম্বর ১২, ২০১৯ তারিখে মূল থেকে আর্কাইভ করা। সংগ্রহের তারিখ সেপ্টেম্বর ১০, ২০১৯ 
  5. Jensen, Richard (৯ ডিসেম্বর ২০২০)। ""A damn stupid thing to do"—the origins of C"Ars Technica (ইংরেজি ভাষায়)। সংগ্রহের তারিখ ২০২২-০৩-২৮ 
  6. "C manual pages"। FreeBSD Miscellaneous Information Manual (FreeBSD 13.0 সংস্করণ)। ৩০ মে ২০১১। জানুয়ারি ২১, ২০২১ তারিখে মূল থেকে আর্কাইভ করা। সংগ্রহের তারিখ জানুয়ারি ১৫, ২০২১  [১] ওয়েব্যাক মেশিনে আর্কাইভকৃত জানুয়ারি ২১, ২০২১ তারিখে
  7. Kernighan, Brian W.; Ritchie, Dennis M. (মার্চ ১৯৮৮)। The C Programming Language (2nd সংস্করণ)। Englewood Cliffs, NJ: Prentice Hallআইএসবিএন 978-0-13-110362-7 
  8. Stroustrup (২০০২)। ভাইবোন প্রতিদ্বন্দ্বী: C এবং C++ (PDF) (প্রতিবেদন)। AT&T Labs। আগস্ট ২৪, ২০১৪ তারিখে মূল (PDF) থেকে আর্কাইভ করা। সংগ্রহের তারিখ এপ্রিল ১৪, ২০১৪