تاریخچه زبان C
از اونجایی که من علاقه خاصی به زبان C و خانواده این زبان ( ++C# ،  C و در آینده D ) دارم تصمیم گرفتم توی آرشیو موضوعی یه قسمت هم برای این زبان باز کنم . اولین پست هم راجع به تاریخچه زبان C هست که البته بیشتر اون به مدح و ستایش زبان C پرداخته ...



آرشیو های C



جستجوی باستان شناسانه ما در مورد اصل و ریشه زبان C با بحث در مورد سیستم عامل UNIX ‏شروع می شود ، زیرا هم خود سیستم و هم اکثر برنامه هایی که روی آن اجرا می شوند به زبان C نوشته شده اند . با این حال ، این بدان معنی نیست که C به یونیکس یا هر سیستم عامل دیگری محدود شده است . محیط ایجاد و توسعه مشترک UNIX/C‏ ، شهرتی را برای زبان برنامه نویسی سیستمی بودن به زبان C داده است ، زیرا برای نوشتن کامپایلر و سیستم عامل سودمند است . زبان C همچنین برای نوشتن برنامه های اصلی در بسیاری از حوزه های مختلف ، سودمند است .
سیستم عامل یونیکس در ابتدا در سال 1969 در Bell Laboratories در Murray Hill New Jersey و برروی چیزی که اکنون می توان آن را یک DEC PDP-7 کوچک تلقی کرد ، ایجاد شد . یونیکس کاملا به زبان اسمبلی PDP-7 نوشته شد . از نظر طراحی ، این سیستم عامل طوری درنظر گرفته شده بود که با ارائه کردن ابزارهای ایجاد سودمند ، فرمان های کوچک و یک محیط نسبتا باز ، برنامه نویس پسند باشد . خپلی زود بعد ازایجاد یونیکس ، Ken Thompson یک کامپایلر برای یک زبان جدید به نام B پیاده سازی کرد .
در این هنگام سودمند است که ریشه و تاریخچه زبان B ایجاد شده توسط Ken Thompson که جد مستقیم C است را بررسی کنیم . در زیر، خانواده کامل زبان C آمده است :


Algol 60 : در اوایل 1960 توسط یک کمیته بین المللی طراحی شد .
CPL Combined Programing Language : در سال 1963 ، هم در Cambridge و هم در دانشگاه لندن ایجاد شد .
BCPL Basic Combined Programing Language : در سال 1967 توسط Martin Richards در کمبریج ایجاد شد .
B : در سال 1970 توسط Ken Thompson در Bell Labs ایجاد شد .
C : در سال 1972 ، توسط Dennis Ritchie در Bell Labs ایجاد شد .


سپس درسال 1983 ، کمیته (ANSI) American National Standards Institue به منظور ایجاد ANSI C یعنی استاندارد ، زبان C ایجاد شد .
Algol 60 ‏زبانی بود که فقط چند سال بعد ازمعرفی FORTRAN ظاهر شد . این زبان جدید ، پیچیده تر بود و تاثیر و نفوذ زیادی برروی طراحی زبان های برنامه نویسی آ ینده داشت . ایجاد کنندگان آن توجه زیادی را صرف منظم بودن دستور زبان ، ساختار ماژولار و قابلیت های دیگری که معمولا به زبان های ساخت یافته سطح بالا مربوط است کردند . متاسفانه ، Algol 60 در واقع هرگز در ایالات متحده مرسوم نشد . بسیاری از افراد می گویند که این به خاطر کلی بودن و انتزاع زبان بود .
ایجاد کنندگان (Combined Programming Language) CPL قصد داشتند که هدف ارزشمند Algol 60 ‏را به واقعیات یک کامپیوتر واقعی منتقل کنند . ولی همان طور که یادگیری و پیاده سازی Algol 60 سخت بود ، CPL‏ هم اینگونه بود و این باعث عدم موفقیت آن شد . ایجاد کنندگان (Basic Combined Programming Language) BCPL هنوز به بهترین چیزهایی که CPL می بایست ارائه کند پایبند بودند ، می خواستند که CPL را به قابلیت های اساسی خوب آن خلاصه کنند .
وقتی که Ken Thompson ، زبان B را برای پیاده سازی زود هنگام یونیکس طراحی کرد ، سعی می کرد که بیشتر از قبل CPL را ساده کند . او موفق به ایجاد یک زبان بسیار پراکنده شد که برای استفاده برروی سخت افزار موجود برای او مناسب بود . ولی ، هم BCPL و هم B می توانستند تلاش های راهگشای خود را کمی پیش ببرند ، ولی تبدیل به زبان های محدودی شدند که فقط برای برخورد با انواع خاصی از مسائل سودمند بودند .
برای مثال ، خپلی زود بعد از اینکه . Ken Thompson زبان Bرا پیاده سازی کرد ، یک ماشین جدید به نام PDP-ll عرضه شد . با اینکه PDP-ll نسبت به جد خود PDP-7که ماشین بزرگ تری بود ، طبق استانداردهای امروز کوچک بود . این ماشین فقط K 24 حافظه داشت که سیستم عامل K 16 از آن را استفاده می کرد و یک دیسک ثابت K 512 داشت . ابتدا تصمیم گرفتند که یونیکس را دوباره به B بنویسند ، ولی زبان B به خاطر طراحی مفسر آن ، کند بود . یک مشکل دیگرهم وجود داشت : B کلمه گرا بود ، درحالی که PDP-ll ‏بایت گرا بود . به این دلایل ، در سال 1971 کار روی جانشین B که به درستی C نامیده شد شرع شد . Dennis Ritchie مفتخر به ایجاد C است که برخی ازکلیات ازدست رفته در BCPL و B را برگرداند . او این کار را از طریق استفاده هوشیار انه از نوع داده ها انجام داد و در عین حال سادگی و دستیابی مستقیم به سخت افزار را که یکی از اهداف اصلی طراحی CPL بود را حفظ کرد .
بسیاری از زبان هایی که به وسیله یک شخص ایجاد شده اند (C ، پاسکال ، Lisp و APL) یک پیوستگی دارند که زبان هایی که به وسیله تیم های بزرگ برنامه نویسی ایجاد شده اند (Ada ، PL/I و Algol 60) فاقد آن هستند . همچنین معمول است که زبان نوشته شده توسط یک شخص ، فیلد تخصصی ایجاد کننده را منعکس می کند . Dennis Richie به خاطر کار بر روی نرم افزارهای سیستمی ، زبان های کامپیوتری ، سیستم عامل ها و ایجاد کننده های برنامه معروف بود .
با درنظرگرفتن فیلدهای تخصصی Ritchie‏ ، به راحتی می توان می فهمید که چرا C زبان انتخابی برای طراحی نرم افزار سیستمی است . C زبان نسبتا سطح پایینی است که به شما امکان می دهد تا هر گونه جزئیات را در منطق یک برنامه مشخص کنید تا حداکثر کارآیی کامپیوتر را به دست آورید . ولی زبان C همچنین زبان سطح بالایی است که می تواند جزئیات معماری کامپیوتر را پنهان کند و به این صورت کارأیی و تاثیر برنامه نویسی را بالا ببرد .

C در مقایسه با زبان های سطح بالای دیگر

در این هنگام ممکن است بپرسید درمقایسه با زبان های برنامه نویسی دیگر چگونه است ؟ یک تسلسل احتمالی در شکل زیر نشان داده شده است .
Cyborg Neural  Path Symbiosis
.
.
.
Artificial intelligence
Operating system command languages
Problem-oriented languages
Machine-oriented languages
Assembly language
.
.
.
Actual hardware

اگر از پایین این تسلسل را شروع کنید و به سمت بالا بیایید ، از قسمت محسوس و تجربی به قسمت پیچیده و تثوریک می رسید . دایره های کوچک نشان دهنده پیشرفت های مهم است که بسیاری از مراحل آن حذف شده است . اجداد اولیه کامپیوترها مثل (1805) Jacquard loom و موتور تحلیلی (1834) Charles Babbage ، در سخت افزار برنامه نویسی شدند . ممکن است زمانی برسد که با وصل کردن یک رابط مسیر عصبی در یک سوکتی که در temporal lobe (حافظه زبان) یا ناحیه Broca (ناحیه موتور زبان) قشر مخ (cortex) کاشته شده است ، یک ماشین را برنامه ریزی کنید .
اولین زبان های اسمبلی که به زمان معرفی اولیه کامپیوترهای الکترونیکی برمی گردند . راهی را برای کار کردن مستقیم با مجموعه دستورالعمل های توکار کامپیوتر فراهم می کنند و یاد گیری آنها نسبتا ساده است . از آنجا یی که زبان های اسمبلی شما را مجبور می کنند تا از نظر سخت افزاری فکرکنید ، باید هر عملیات را با اصطلاحات ماشین مشخص کنید . بنابراین ، همیشه باید بیت ها را به داخل ثبات ها منتقل کنید و یا از آنها خارج کنید ، آنها را اضافه کنید ، محتویات ثبات را از یک ثبات به ثبات دیگر شیفت دهید و سرانجام نتایج را در حافظه ذخیره کنید . این یک روش خسته کننده و مستعد خطا بود . اولین زبان های سطح بالا مثل FORTRAN ، به عنوان جایگزینی برای زبان های اسمبلی ایجاد شدند . زبان های سطح بالا بسیار کلی تر و انتزاعی بودند و به شما امکان می دادند تا به جای فکرکردن از نظر سخت افزاری ، ازنظر مساله مورد نظر فکر کنید .
متأسفانه ایجاد کنندگان زبان های سطح بالا این فرض غلط را داشتند که هرکس که می خواهد از یک استاندارد استفاده کند ، ترجیح می دهد که از اتوماتیک استفاده کند . این برنامه نویسان که از فراهم کردن راحتی برای برنامه نویس هیجان زده بودند ، برخی از گزینه های ضروری را جا گذاشتند . FORTRAN و Algol برای کار در سطح سیستم ، بیش از حد انتزاعی هستند . این زبان ها مساله گرا هستند و از نوعی هستند که برای حل مسائل مهندسی ، علوم یا تجارت به کار می روند . برنامه نویسانی که می خواستند نرم افزار سیستمی بنویسند ، هنوز مجبور بودند که به اسمبلی ماشین خود متکی باشند .
در واکنش به این شرایط ، چند برنامه نویس نرم افزار سیستمی یک قدم به عقب برداشتند ( ازنظر تسلسل ، یک مرحله به پایین ) و دسته زبان های ماشین گرا را ایجاد کردند . همان طور که در شجره نامه C دیدید ، BCPL و B در این دسته از ابزارهای نرم افزاری بسیار سطح پایین قرار دارند . این زبان ها برای یک ماشین خاص عالی بودند ، ولی برای ماشین های دیگر آنقدرها خوب نبودند . این زبان ها بیش از حد به یک معماری خاص وابسته بودند . زبان C ‏ ، یک مرحله بالاتر از زبان های ماشین گرا قرار دارد ، ولی هنوز یک مرحله در زیر اکثر زبان های حل مساله قرار دارد . زبان C آن قدر به کامپیوتر نزدیک است که کنترل زیادی برروی جزئیات پیاده سازی برنامه به شما بدهد و در عین حال آن قدر از کامپیوتر دور است که جزئیات سخت افزاری را نادیده بگیرد . به این دلیل است که زبان C ، هم یک زبان سطح بالا و هم یک زبان سطح پایین تلقی می شود.

مزایای زبان C

از هر زبان کامپیوتری که استفاده کنید ظاهر سورس کد خاص خود را دارد . APL ، ظاهر هیروگلیفی خاص خود را دارد . زبان اسمبلی ، ستون های ممتد حافظه خود را دارد و پاسکال ، دستور زبان خوانای خود را دارد . بعد نوبت به C می رسد . بسیاری از برنامه نویسانی که برای اولین بار با C مواجه می شوند ، دستور زبان آن را رمزنگارانه و شاید ترس آورمی بینند . C شامل تعداد کمی از ساختارهای دستوری شبه انگلیسی که در زبان های برنامه نویسی دیگر یافت می شوند ، می باشد . در عوض ، زبان C عملگرهایی دارد که غیر معمول به نظر می رسند و اشاره گرهای بسیار زیاد و بیش از حدی را در اختیار مهندس نرم افزار قرار می دهد . برنامه نویسان جدید C به زودی تعداد زیادی خصوصیات مختلف زبانی را پیدا می کنند که ریشه آنها به جد اولیه نرم افزاری / سخت افزاری C برمی گردد . قسمت های زیر نقاط قوت زبان C را نشان می دهند .

اندازه کد بهینه
قواعد دستوری کمتری در زبان C نسبت به بسیاری از زبان ها وجود دارد و می توان یک کامپایلر C با کیفیت بالا نوشت که در فقط K 256 حافظه کارکند . در واقع در زبان C بیشتر ار آنکه کلمه کلیدی وجود داشته باشد ، عملگرها و ترکیب عملگرها وجود دارد .

مجموعه کوچکی از کلمات کلیدی
زبان C اولیه که توسط Dennis Ritchie ایجاد شد ، فقط شامل 27 کلمه کلیدی بود . استاندارد ANSI C ( که بعدا مورد بحث قرار می گیرد ) چندین کلمه رزرو شده را اضافه کرده است . Microsoft C/C++ مجموعه دستورالعمل ها را بیشتر گسترش داده است و تعداد کلمات کلیدی Microsoft C/C++ را به بیش از 70 رساند .
بسیاری از توابعی که به طور معمول به عنوان بخشی از زبان های برنامه نویسی دیگر تعریف می شوند ، در زبان C وجود ندارند . برای مثال ، C هیچ قابلیت نهادین برای ورودی و خروجی ندارد و نیز هیچ عملیات ریاضی ( به غیر از جمع و تفریق مقدماتی ) یا توابع کار با رشته ندارد . از آنجا یی که هر زبانی که این قابلیت ها را ندارد استفاده زیادی ندارد ، زبان C یک مجموعه غنی از توابع کتابخانه ای را برای ورودی و خروجی ، عملیات ریاضی و کار با رشته ها ارائه کرده است . این مجموعه کتابخانه های توافق شده ، آن چنان به طور رایج مورد استفاده قرار می گیرند که تقریبا می توان آن را به عنوان بخشی از خود زبان دانست . با این حال ، یکی از نقاط قوت C ‏ ، ساختار آزاد آن است که شما را قادر می کند تا این توابع را به آسانی دوباره بنویسید .

فایل هایی که به سرعت برق اجرا می شوند
‏کد C که به وسیله اکثرکامپایلرها ایجاد می شود ، بسیار مؤثر و سریع است . ترکیب یک زبان کوچک ، یک سیستم زمان اجرای کوچک و این واقعیت که زبان به سخت افزار نزدیک است ، باعث می شود که بسیاری از برنامه های C با سرعتی نزدیک به معادل های اسمبلی خود اجرا شوند .

بررسی نوع محدود (Limited Type Checking)
برخلاف پاسکال که یک زبان با بررسی نوع شدید است ، C با انواع داده ها تا حدودی راحت تر رفتار می کند . این یک ویژگی بازمانده از زبان B است که آن هم ازنظر بررسی نوع راحت تر بود . این راحتی و عدم سخت گیری به شما امکان می دهد تا داده ها را به روش های مختلفی مشاهده کنید . برای مثال ، در یک نقطه از برنامه ، برنامه ممکن است یک متغیر را به صورت کاراکتر ببیند و برای تبدیل به حروف بزرگ ( با کم کردن 32 واحد از آن ، می تواند همین سلول حافظه را به صورت معادل اسکی کارا کتر ببیند .

پیاده سازی و طراحی به صورت بالا به پایین
زبان C حاوی تمام ساختارهای کنترلی است که از یک زبان امروزی انتظار دارید . این موضوع وقتی قابل توجه است که دوره شکل گیری C در سال 1971 را درنظر بگیرید که قبل از برنامه نویسی ساخت یافته رسمی بود . حلقه های for ، ساختارهای if و if-else ، دستورcase(switch)‏ و حلقه while ، همه در زبان گنجانده شدند . C ‏همچنین با مدیریت محدوده کد و داده ها ، امکان تقسیم کردن کد و داده ها به چند قسمت را فراهم می کند . برای مثال ، زبان C متغیرهای محلی را برای این هدف و فراخوانی با مقدار را برای خصوصی سازی داده های زیر روال ارائه کرده است .

ساختار ماژولار
C ازبرنامه نویسی ماژولار پشتیبانی می کند که مفهوم آن کا مپایل و Link کردن جداگانه است . این ویژگی به شما امکان می دهد که فقط بخش هایی از یک برنامه را کامپایل مجدد کنید که در طول توسعه تغییر کرده اند . وقتی که برنامه های بزرگ یا حتی برنامه های متوسط را روی سیستم های کند ایجاد می کنید ، این قابلیت می تواند فوق العاده مهم باشد . بدون پشتیبانی از برنامه نویسی ماژولار ، زمان مورد نیاز برای کامپایل یک برنامه کامل می تواند تغییر ، کامپایل و تست چرخه را بی نهایت کند نماید .

واسط پنهان برای زبان اسمبلی
یک روش خوب برای فراخوانی روتین های زبان اسمبلی در اکثر کامپایلرهای C وجود دارد . این روش به همراه جداسازی کامپایل و Link کردن ، زبان C را در برنامه هایی که نیاز به ترکیبی از روتین های سطح بالا و اسمبلی دارند رقیب بسیار قدرتمندی نموده است . روتین های زبان C در اکثر سیستم ها می توانند در زبان اسمبلی گنجانده شوند .

کار با بیت ها
اغلب در برنامه نویسی سیستمی ، لازم است که آبجکت ها را در سطح بیتی دستکاری کرد . به طور طبیعی ، چون اصل و ریشه C به طور نزدیکی به سیستم عامل یونیکس مرتبط است ، این زبان یک مجموعه غنی از عملگرها را برای کار با بیت ها فراهم کرده است .

نوع داده ای اشاره گر
یکی از قابلیت هایی که یک سیستم عامل از یک زبان می خواهد ، قابلیت آدرس دهی ناحیه های خاصی از حافظه است . این قابلیت همچنین سرعت اجرای برنامه را بالا می برد . زبان C ، با استفاده از اشاره گرها به این نیاز طراحی پاسخ گفته است . با اینکه زبان های دیگر هم اشاره گرها را پیاده سازی کرده اند ، زبان C به خاطر قابلیتش برای انجام عملیات ریاضی روی اشاره گرها معروف است . برای مثال ، اگر متغیر student_record_ptr به اولین عنصر از آرایه student_records اشاره کند ، student_record_ptr + 1 آدرس عنصر دوم student_records خواهد بود .

ساختار های قابل گسترش
تمام آرایه ها در C یک بعدی هستند . آرایه های چند بعدی از ترکیب این آرایه های یک بعدی ساخته می شوند . آرایه ها و ساختارها ( رکوردها ) را میتوان به هر شکلی با هم ترکیب کرد و سازمان های پایگاه داده ای را ایجاد کرد که فقط توسط توانایی برنامه نویس محدودند .

صرفه جویی در حافظه
به خاطر بسیاری از دلایلی که برنامه های C سریع هستند ، از نظر مصرف حافظه هم خوبند . عدم وجود توابع نهادین (built-in) می شود که لازم نباشد که برنامه توابعی را با خود داشته باشد که به وسیله آن برنامه مورد نیاز نباشد .

قابلیت حمل از یک سکو به سکوی دیگر
قابلیت حمل یعنی راحتی تبدیل یک برنامه که روی یک کامپیوتر یا سیستم عامل اجرا می شود به کامپیوتر یا سیستم دیگر . برنامه هایی که به زبان C نوشته می شوند یکی از قابل حمل ترین برنامه های دنیای پیشرفته کامپیوتر می باشند . این ویژگی به ویژه در دنیای مینی کامپیوتر و میکرو کامپیوتر صدق می کند .

روتین های کتابخانه ای قدرتمند
کتابخانه های توابع تجاری برای تمام کامپایلرهای محبوب C موجود است . کتابخانه هایی برای گرافیگ ، مدیریت فایل ها ، پشتیبانی از پایگاه داده ها ، ایجاد پنجره ها در صفحه نمایش ، ورود داده ها ، ارتباطات و توابع پشتیبانی کلی وجود دارد . با استفاده از این کتابخانه ها می توانید به میزان زیادی در زمان ایجاد برنامه صرفه جویی کنید .

معایب زبان C


هیچ زبان برنامه نویسی بدون نقصی وجود ندارد . مسائل مختلف برنامه نویسی نیاز به راه حل های متفاوتی دارند و وظیفه مهندس نرم افزار این است که بهترین زبان را برای یک پروژه انتخاب کند . در هر پروژه ای ، این موضوع یکی از اولین تصمیماتی است که باید بگیرید و وقتی که شروع به برنامه نویسی کردید این تقریبا چاره ناپذیر است . انتخاب زبان برنامه نویسی همچنین می تواند تفاوت بین موفقیت و عدم موفقیت پروژه را باعث شود . در زیر برخی از نفاط ضعف زبان C مطرح می شود تا به شما ایده بهتری دهد که برای یک برنامه چه وقت از زبان C استفاده کنید و چه وقت از زبان C استفاده نکنید .

بررسی نوع محدود !
این واقعیت که زبان C در مورد نوع داده زیاد سخت گیر نیست یکی از نقاط قوت آن است . ولی در عین حال یکی از نقاط ضعف آن نیز می باشد . از نظر تکنیکی ، بررسی نوع یعنی اینکه یک زبان تا چه اندازه استفاده از انواع متغیرها را اجباری می کند ( برای مثال ، عدد صحیح و عدد با ممیز شناور دو نوع مختلف عددی هستند ) . در برخی زبان ها ، غیر مجاز است که یک نوع داده ای را بدون فراخوانی یک تابع تبدیل به نوع داده ای دیگر منتسب کنید . این امر باعث می شود که داده ها توسط گرد شدن ناخواسته از دست نروند .
همان طور که قبلا بحث شد . زبان C به یک عدد صحیح اجازه می دهد که به یک متغیر کاراکتری داده شود و برعکس . این برای شما به این معنی است که باید به درستی متغیرهای خود را مدیریت کنید . برای برنامه نویسان با تجربه ، این موضوع مشکلی را ایجاد نمی کند . ولی ، برنامه نویسان تازه کار باید به یاد داشته باشند که این امر می تواند باعث اثرات جانبی شود . اثر جانبی (side effect) در یک زبان ، یک تغییر غیرمنتظره در یک متغیر یا آ یتم دیگر است . از آنجایی که زبان C در مورد نوع داده زیاد سخت گیری نمی کند ، برای کار با داده ها، انعطاف زیادی را در اختیار شما قرار می دهد . برای مثال، عملگر انتساب (=) می تواند بیش از یک بار در یک عبارت ظاهر شود . این انعطاف پذیری که می تو انید از آن به نفع خود استفاده کنید ، به این معنی است که می توان عبارت هایی نوشت که مقدار مشخص و روشنی نداشته باشند . محدود کردن استفاده از عملگر انتساب و عملگرهای مشابه یا حذف تمام اثرات جانبی و نتایج غیر قابل پیش بینی ، مقدار زیادی از قدرت و محبوبیت زبان C به عنوان یک زبان اسمبلی سطح بالا راکم می کند.

نظارت محدود در زمان اجرا
عدم بررسی در سیستم زمان اجرای C می تواند باعث شود که بسیاری از مساثل پیچیده وگذرا تشخیص داده نشوند . برای مثال ، اگر برنامه شما از محدوده های یک آرایه تجاوزکند سیستم زمان اجرا اخطار نمی دهد . این یکی از هزینه های کارآمد کردن یک کامپایلر به دلیل سرعت و کارآیی است.

زبان C برای بچه ها نیست !
دامنه فوق العاده قابلیت های C ازکار با بیت ها تا I/O شکل گرفته به صورت سطح بالا و سازگاری نسبی آن از یک ماشین به ماشین دیگر به پذیرش آن در برنامه های علمی ، مهندسی و تجاری انجامیده است و این مستقیما به در دسترس بودن گسترده سیستم عامل یونیکس برروی تمام کامپیوترها از هر نوع و اندازه ای ، کمک کرده است .
با این حال ، زبان C مثل هر ابزار قدرتمند دیگری مسئولیت های سنگینی را برعهده استفاده کنندگان خود قرار می دهد . برنامه نویسان C باید به سرعت یک نظم خاص را به خود بگیرند و باید قواعد و قرارداد های مختلفی را اتخاذ کنند تا برنامه هایشان هم مدت ها بعد از اینکه نوشته شدند برای خودشان قابل فهم باشند و هم برای کسانی که سعی می کنند تا کد را برای اولین بار تجزیه و تحلیل کنند . در زبان C ، نظم برنامه نویسی ضروری است . نکته خوشحال کننده این است که این نظم تقریبا به صورت خودکار توسط تمرین به دست می آید .


ANSI C : American National Standard Institue

کمیته American NatIOnal Standards Institute) ANSI) استانداردهایی را برای زبان C ایجاد کرده است . این قسمت برخی از تغییرات قابل توجه که توسط این کمیته پیشنهاد و پیاده سازی شده است را شرح می دهد . برخی از این تغییرات برای افزایش انعطاف پذیری زبان درنظرگرفته شده اند و برخی دیگر برای استاندارد کردن قابلیت هایی که فبلا به عهده پیاده کننده کامپایلرگذاشته می شد ، درنظرگرفته شده اند .
قبلا ، تنها اسناندارد موجود ، کتاب (( زبان برنامه نویسی C )) نوشته B.Kernighan و D.Ritchie ( انتشارات Prentice-Hell ، 1988) بود . این کتاب ، مختص برخی جزئیات زبان نبود که منجر به اخنلاف بین کامپایلرها می شد . استاندارد ANSI تلاش کرد تا این ابهامات را برطرف کند . اگرچه چند نغبیر پیشنهاد شده می توانستند باعث مشکلاتی برای برخی از برنامه هایی که قبلا نوشته شده اند شود ، ولی نباید برروی اکثر برنامه ها تاثیر بگذارند .
استاندارد ANSI C ، نسبت به قبل فرصت بهتری را برای نوشتن کد C قابل حمل فراهم کرده است . ولی ، این استاندارد همه نواحی سردرگمی در زبان را تصحیح نکرده است و از آنجایی که C به طورکارآمدی با سخت افزار ماشین ارتباط برقرار می کند ، بسیاری از برنامه ها همیشه وقتی که به محیط دیگری انتقال داده می شوند به مقداری تصحیح نیاز دارند . کمیته ANSI که استاندارد را ایجاد کرده است . عبارت هایی را به عنوان راهنما اتخاذ کرده است که بر روی هم ((روح C )) نامیده می شوند . برخی از این عبارات اینها هستد :

. به برنامه نویس اعتماد کنید .
. برنامه نویس را از انجام آنچه که باید انجام شود باز ندارید .
. برنامه را کوچک و ساده نگه دارید .

به علاوه با جامعه بین المللی مشورت شد تا اطمینان حاصل شود که C استاندار ANSI(Amencan) شبیه نسخه استاندارد ISO (International Standards Organization) خواهد بود . به خاطر این تلاش ها ، زبان C تنها زبانی است که به طور کارآمد با دنباله های جمع آوری مختلف ، مجموعه کاراکترهای عظیم و چندین فرهنگ کاربری برخورد می کند .

منبع : مرجع کامل Visual C++.Net نوشته Chris H. Pappas و William H. Murray
نشر روزنه