این ضمیمه به عنوان کمکی به برنامهنویسان C با شناسایی جنبههای مختلف زبان تهیه شده است. به این طریق، این ضمیمه به عنوان یک راهنما است و آموزشی نیست.
سرمنشاءهای [برنامه] C
زبان برنامه نویس C در اولین بار به وسیله دنیس ریتج (Dennis Ritch) بر روی یک DEC.PDP-11 که از سیستمعامل UNIX استفاده میکرد. اختراع گردید. زبان C دنباله زبانی با نام BCPL است که هنوز در اروپا بیشترین استفاده از آن میشود. BEPL به وسیله مارتین ریچارد (Martin Richard) به وجود آمد و به وسیله زبان B تحت تأثیر قرار گرفت. که توسط کن تامپسون (Ken Thompson) اختراع شد و به ایجاد زبان C منجر گردید.
برای سالهای متمادی استاندارد دی فاکتور (de factor) برای C، استانداردی بود که به وسیله ورژن ۵ سیستم عامل UNIX پشتیبانی میشد و در برنامهنویسی C که به وسیله برایان کرنافن (Brian Kernighan) و دنیس ریچ (Dennis Ritch) نوشته شده بود توضیح داده میشد و به وسیله (Englewood cliffs: Prentice-Hall.Inc.,1978) [منتشر گردید]. در هنگامی که محبوبیت کامپیوترهای کوچک افزایش یافت تعداد زیادی از کارکردهای C خلق شد. اکثریت این کارکردها در سطح کد با یکدیگر قابل تعویض بودند بنابراین چون استانداردی وجود نداشت اختلاف به وجود میآمد.
برای تصحیح این وضعیت کمیتهای در تابستان ۱۹۸۳ به منظور کار بر روی تولید یک ANSI استاندارد تشکیل شد تا اینکه زبان C را توصیف کند. با این نوشته، استاندارد مورد نظر کامل بوده و سازگاری آن با ANSI بسیار زود مورد قبول واقع شد.
زبان C به عنوان یک زبان استاندارد
زبان C عموماً به عنوان یک زبان ساختاری در نظر گرفته شد، با برخی تشابهات با ALGOL و پاسکال. اگرچه کلمه ساختار بلوکی مستقیماً برای زبان C در حالت آکادمیک به کار نمیرود، زبان C به صورت غیر رسمی بخشی از آن گروه زبان است، مشخصه بارز زبان ساختاری جداسازی کد و اطلاعات از یکدیگر است. این مطلب به این معنی است که زبان میتواند همه اطلاعات و دستورالعملهای ضروری برای انجام یک کار مشخص را از بقیه برنامه حذف و پنهان کند. به طور کلی، جداسازی با مراحل فرعی با انواع عمومیای که دائماند، به دست میآید. به این طریق، احتمال دارد که مراحل فرعی نوشته شوند تا اینکه وقایعی که در آن اتفاق میافتد باعث تأثیرات فرعی در قسمتهای دیگر برنامه نشود. استفاده بیش از حد از انواع جهانی (انواعی که در کل برنامه شناخته میشوند) ممکن است باعث نفوذ عوامل به درون برنامه شود با مجاز شناختن تأثیرات ناخواسته در برنامه، در برنامه C همه مراحل فرعی عملکردهای مجزا هستند.
عملکردها بلوکهای سازههای Cاند که در آن همه فعالیتها اتفاق میافتند. آنها کارهای بخصوص را در برنامه به منظور کدگذاری و تشخیص جداگانه انجام میدهند. پس از debugging یک عملکرد که فقط انواع عمومی را به کار میگیرد، شما میتوانید بر عملکردی تکیه کنید که در همه موقعیتهای متنوع بدون به وجود آوردن تأثیرات جانبی در بخشهای دیگر برنامه، کار کند. همه انواع نشان داده شده در این عملکرد بخصوص فقط با آن عملکرد شناخته خواهند شد.
همچنین استفاده از بلوکهای کد در برنامه C ساختار برنامه را به وجود میآورد. یک بلوک کد عبارتهایی از یک گروه برنامه منطقی متصل است که میتواند به عنوان یک واحد در نظر گرفته شود. و با قرار گرفتن خطوط کد مابین ابروها بسته و باز مانند زیر قرار میگیرند.
If (x<10) {print f ("invalid input-retry"); done=o;}
در این مثال، دو عبارت پس از "if" بین ابروها هر دو نمایش داده میشوند اگر X کمتر از ۱۰ باشد. این دو عبارت با هم با ابروها یک بلوک کد را نشان میدهند. آنها به یکدیگر متصل میشوند؛ یک عبارت نمیتواند بدون نشان دادن دیگری نشان داده شود. در C هر عبارت میتواند یا یک عبارت مجزا و یا بلوکی از عبارتها باشد. استفاده از بلوکهای کد برنامههای خوانایی را با متطقی برای پیروی کردن از آنها، به وجود میآورد.
C یک زبان برنامهنویس است، بر خلاف اکثر برنامههای کامپیوتری سطح بالا، C محدودیتهایی را اعمال میکند که شما میتوانید با آن کار کنید. با استفاده از C یک برنامهنویس میتواند از برنامهنویسی کد در کل جلوگیری کند، فقط در موارد بسیار ضروری در حقیقت یک انگیزه برای اختراع C به وجود آوردن یک برنامه جایگزین مونتاژ بود.
زبان کامپیوتری از نشانهای مشخص از یک کد دهتایی واقعی استفاده میکند که کامپیوتر مستقیماً آن را به کار میگیرد. هر زبان کامپیوتری عامل به یک عامل مجزا طراحی میشود تا اینکه کامپیوتر آن را به کار گیرد. اگر چه یک زبان کامپیوتری به برنامهنویسان قدرت انجام کارها را با بالاترین انعطاف و بهرهمندی میدهد، بسیار آشکار، کارکردن با آن در هنگام ایجاد یک برنامه مشکل است. به علاوه چون یک زبان کامپیوتری طبیعتاً بی برنامه است، برنامه نهایی تمایل به «یک کد خطی» (Spaghett:code) یک آشفتگی جهشی (tangle of jump) و یا شاخص و خواندن دارد. این مطالب باعث میشود که این زبان برای خوانده شدن، بهسازی شدن و نگهداری مشکل باشد.
در ابتدا C برای برنامه نویسی سیستمها به کار رفت. برنامه سیستم قسمتی از یک دسته از برنامهها است که قسمتی از یک سیستم عامل کامپیوتر و یا کاربردهای پشتیبان را شکل میدهد. مثلا موارد زیر را برنامههای سیستم مینامند.
● سیستمهای عامل
● مترجمها
● سردبیرها
● اسمبلرها
● مؤلفین
● مدیران داده ها
هنگامی که C در حال همهگیر شدن بود بسیاری از برنامهنویسان به دلیل کارآیی و قابلیت دسترسی به آن، آن را برای برنامهریزی همه کارها به کار گرفتند. چون مؤلفین C برای همه کامپیوترها وجود دارند، گرفتن یک کد برای یک ماشین و سپس تألیف و به کار گیری آن در ماشین دیگر با تغییرات بسیار کم یا بدون تغییر، بسیار ساده است. این دسترسی در زمان و هزینه صرفهجویی میکند. مؤلفین C همچنین تصمیم به تولید یک کد سریع، متراکم و عینی کردند. مثلاً سریعتر و کوچکتر از همگردانهای BASIC.
شاید دلیل واقعی اینکه C در همه انواع کارهای برنامهریزی به کار میرود اینست که برنامهنویسان آن را دوست دارند. C سرعت «همگردانان و گستردگی FORTH را دارد، در حالی که فقط تعداد کمی از محدودیتهای پاسکال را دارد. یک برنامهنویس C میتواند یک آزمایشگاه از کارکردهای به وجود آورد که با شخصیتش سازگاری داشته باشد، زیرا C به همگردانیهای جداگانه ترغیب میکند و اجازه میدهد که پروژههای بزرگ به راحتی مدیریت شوند.
یک بازنگری C
همانگونه که تعریف شد استاندارد ANSL مورد نظر، ۳۲ کلمه کلیدی که در جدول A-1 نشان داده شده همراه با دستور فرمان C، برنامه زبان C را تشکیل میدهد.
علاوه بر این کلمات کلیدی چندین همگردانی را C به منظور استفاده در فرآیندها یا محیطهای برنامهنویسی چند زبانه طراحی کرد. و کلمات زیر برای دستیابی به کنترل بیشتر در راه حافظه و منابع سیستمهای مورد استفاده اضافه شدهاند.
-es -ds -es -ss
Cdecl far huge interrupt
Near pascal
همگی کلمات کلیدی C در حروف نمونه پایینتر قرار دارند. در C نمونه پایینتر یا بالاتر تفاوتی نمیکند به همین دلیل "else" یک کلمه کلیدی است ELSE اینطور نیست.
تنوعات انواع و اعلامها
C پنج نوع اطلاعات درونی دارد، همانگونه که در جدول A-2 نشان داده شده است. به غیر از کلمه Void همه این اطلاعات ممکن است در کاربرد نشاندهندههای نوع C تعریف شوند.
Signed unsigned short long
نامهای متنوع، رشتههایی از حروفاند از یک تا چند مشخصه در طول، استاندارد ANSL میگوید که شش مشخصه مهم خواهند بود. برای وضوح خط تیره ممکن است برای قسمتی از نام یک متغیر به کار رود مثلاً (first-time)
به خاطر داشته باشید که در C متغیرهای بالاتر و پایینتر متفاوتند TEST-test دو نوع متفاوت خواهند بود.
همه متغیرها میبایست قبل از استفاده نشان داده شوند شکل کلی اعلامها اینست.
نوع Variable – name
Data type C مساوی کلمه کلیدی
مشخصه char
عدد int
نقطه شناور float
نقطه شناور دوم double
ارزش فاقد void
مثلا برای نشان دادن X که یک شناور باشد، Y یک عدد باشد و ch که یک مشخصه باشد شما باید float x; int y; charch را تایپ کنید.
به علاوه در نمونههای درون ساختی شما میتوانید ترکیبهایی از نمونههای درون ساخت با استفاده از struct و union به وجود آورید، همچنین میتوانید با استفاده از typedef نامهای جدیدی برای نمونههای متغیر به وجود آورید.
یک «ساختار» کلکسیونی از متغیرهای جمعآوری شده و بایگانی شده تحت یک نام است یک شکل کلی از نمایاندن ساختار struct struct – name {element1; element2;…. element n} struct-variable است.