সি প্রোগ্রামিং ভাষার উদ্ভাবন ঘটে ১৯৬৯ থেকে ১৯৭৩ সালের মধ্যে মার্কিন যুক্তরাষ্ট্রের এটি অ্যান্ড টি বেল ল্যাবরেটরিতে (AT&T Bell Laboratories)। এর মূল স্রষ্টা ছিলেন প্রখ্যাত কম্পিউটার বিজ্ঞানী ডেনিস রিচি (Dennis Ritchie)। পূর্বে ইউনিক্স অপারেটিং সিস্টেমটি হার্ডওয়্যার-নির্ভর অ্যাসেম্বলি ভাষায় রচিত ছিল; ইউনিক্সকে সহজে অন্য কম্পিউটারে স্থানান্তরযোগ্য (Portable) করার উদ্দেশ্যেই সি ভাষার জন্ম হয়।
সি ভাষার উৎপত্তির ঐতিহাসিক ক্রমধারা নিম্নরূপ:
- ALGOL 60 (১৯৬০): স্ট্রাকচার্ড ব্লক প্রোগ্রামিং ও ব্যাকাস-নাউর ফর্ম (BNF) ব্যাকরণের প্রবর্তন।
- CPL (Combined Programming Language, ১৯৬৩): অত্যন্ত শক্তিশালী কিন্তু কম্পাইলার তৈরি করা দুরূহ ছিল।
- BCPL (Basic Combined Programming Language, ১৯৬৭): কেমব্রিজ বিশ্ববিদ্যালয়ের মার্টিন রিচার্ডস কর্তৃক নির্মিত একটি সাধারণ ও টাইপহীন ভাষা।
- B ভাষা (১৯৬৯): বেল ল্যাবসে কেন থম্পসন BCPL-কে আরও সংক্ষিপ্ত করে ইউনিক্সের প্রথম সংস্করণের জন্য তৈরি করেন।
- C ভাষা (১৯৭২): ডেনিস রিচি B ভাষার সাথে ডেটা টাইপ, ডেটা স্ট্রাকচার ও পয়েন্টার যুক্ত করে একটি পূর্ণাঙ্গ ও শক্তিশালী ভাষা সি (C) উদ্ভাবন করেন।
- ANSI C (C89/C90): ১৯৮৯ সালে আমেরিকান ন্যাশনাল স্ট্যান্ডার্ডস ইনস্টিটিউট (ANSI) দ্বারা সি-এর প্রমিত মান নির্ধারণ করা হয়।
একটি আদর্শ সি প্রোগ্রাম প্রধানত ছয়টি কার্যকরী অংশে বিভক্ত থাকে:
- ডকুমেন্টেশন সেকশন (মন্তব্য অংশ): প্রোগ্রামের উদ্দেশ্য, রচয়িতা ও নিয়মাবলি সংক্রান্ত মন্তব্য। সি-তে মাল্টি-লাইন মন্তব্য (`/* মন্তব্য */`) এবং সি৯৯ সিঙ্গল-লাইন মন্তব্য (`// মন্তব্য`) ব্যবহৃত হয়। প্রিপ্রসেসিংয়ের সময় কম্পাইলার সকল মন্তব্য মুছে ফেলে।
- লিঙ্ক সেকশন (প্রিপ্রসেসর নির্দেশিকা): হেডার ফাইল যুক্ত করার নির্দেশ (`#include <stdio.h>`, `#include <math.h>`), যা স্ট্যান্ডার্ড লাইব্রেরি ফাংশনের প্রোটোটাইপ সরবরাহ করে।
- সংজ্ঞা সেকশন (Definition Section): `#define` নির্দেশিকা ব্যবহার করে প্রতীকী ধ্রুবক (Symbolic Constants) ঘোষণা করা (`#define PI 3.14159`)।
- গ্লোবাল ডিক্লারেশন সেকশন: সমগ্র প্রোগ্রামের সকল ফাংশনে ব্যবহারযোগ্য গ্লোবাল চলক ও ব্যবহারকারী-সংজ্ঞায়িত ফাংশনের প্রোটোটাইপ ঘোষণা।
- main() ফাংশন অংশ: প্রতিটি সি প্রোগ্রামের প্রধান ও বাধ্যতামূলক প্রবেশদ্বার (Entry Point)। প্রোগ্রাম নির্বাহ সর্বদা `main()` থেকে শুরু হয়। প্রমিত ANSI সি-তে এটি `int main(void)` হিসেবে ঘোষিত হয় এবং অপারেটিং সিস্টেমকে সাফল্যের বার্তা হিসেবে `return 0;` প্রদান করে।
- সাবপ্রোগ্রাম সেকশন (ব্যবহারকারী-সংজ্ঞায়িত ফাংশন): মডিউলার কোডিংয়ের স্বার্থে `main()` ফাংশনের বাইরে প্রয়োজনীয় স্বতন্ত্র ফাংশনগুলির পূর্ণাঙ্গ কোড বডি।