به نام خدا

Fatal Error
Welcome To Fatal Error Weblog

  برنامه نویسی C در لینوکس

ابزارهای برنامه نویسی

‏سیستم‌های GNU به همراه کامپایلری به نام gcc ارایه می شود. gcc از ابتدا مخفف GNU C Compiler بود ولی پس از مدتی که قابلیت کامپایل زبان‌های دیگری غیر از C به آن افزوده شد نام آن را GNU Compiler Colection خطاب می‌کنند. پدید آورنده‌ی اصلی GCC ریچارد استالمن، بناینگذار پروژه GNU است. نخستین نسخه GCC در سال ۱۹۸۷ انتشار یافت که یک پیشرفت مهم و اساسی در پیشبرد اهداف GNU Project محسوب می‌شد زیرا محصول جدید اولین کامپایلر بهینه سازی شده قابل حمل ANSI C به عنوان یک نرم افزار آزاد محسوب می شد. در سال ۱۹۹۲ نسخه 2.0 کامپایلر GCC عرضه شد. نسخه جدید قابلیت کامپایل کدهای ++C را نیز داشت.
در سال ۱۹۹۷ یک انشعاب آزمایشی در GCC به نام EGCC به منظور بهینه سازی کامپیایلر و پشتیبانی کامل تر از ++C ایجاد شد. در ادامه EGCC به عنوان نسل بعدی کامپایلر GCC پذیرفته شد و تکامل آن باعث انتشار نسخه سوم GCC در سال ۲۰۰۴ گردید. چهارمین نسخه از کامپایلر GCC در سال ۲۰۰۵ عرضه شد. برای اطمینان از اینکه gccرا نصب کرده‌اید یا خیر دستورات زیر را وارد کنید :

mety@localhost:~/$ gcc –version

4.1.1

mety@localhost:~/

نسخه‌ای از gcc که شما استفاده می کنید ممکن است متفاوت باشد. هر چیزی شبیه این از قبیل 3.4.6 یا 4.1.1 مناسب است. اگر پیغام خطای " command not found" را دریافت می کنید، شما gcc را نصب نکرده‌اید. اگر لینوکستان را از روی cd نصب کرده‌اید می توانید gcc را در آن پیدا کنید. اگر شما نمی‌دانید چگونه باید gcc را در سیستم خود نصب کنید می‌توانید از طریق انجمن‌های مختلف موجود در اینترنت اقدام نمایید.

معرفی کامپایلر gcc

بسیار خوب، می خواهیم کامپایل کردن یک تکه کوچک کد C را از طریق gcc به شما نشان دهیم. اینجا هدف آموزش نحوه استفاده از gcc است بنابر این در این بخش به شرح سازوکار کد C نمی‌پردازیم. در نمونه ۱.۳ کوچکترین قطعه کد C که gcc قادر به کامپایل آن است را می بینید. این کد هیچ کاری انجام نمی دهد.
نمونه  tiny.c

main()

{

}

این قطعه کد را در ویرایشگر متن خود تایپ و با نام tiny.c ذخیره کنید. شما می توانید هر نام دیگری را نیز که به پسوند c. ختم می شود انتخاب کنید. این پسوندی است که برای سورس کدهای نوشته شده با C استفاده می شود. gcc برای کامپایل یک برنامه صحت این پسوند را چک می‌کند. با در اختیار داشتن یک فایل ذخیره شده حالا می توانید به وسیله دستور زیر آنرا کامپایل کنید:
کامپایل برنامه

mety@localhost:~/$ gcc tiny.c

mety@localhost:~/

در صورتیکه که‌این فرمان با موفقیت انجام شود بدون پیغام خروجی خواهد بود. در صورتیکه هر گونه پیغام خطایی را دریافت کردید باید صحت برنامه خود را چک کنید. در صورتیکه فرض کنیم شما این برنامه هشت کاراکتری را درست نوشته باشید باید فایلی به نام a.out در دایرکتوری شما ایجاد شود. این برنامه زبان ماشینی است که از کدهای بالا ساخته شده است. در صورتیکه آنرا اجرا کنید خواهید دید که در واقع هیچ فعالیتی انجام نمی دهد. نامگذاریa.out دلایل تاریخی دارد، اما مخفف output Assembler می‌باشد.
اگر چه gcc این کدها را کامپایل کرد اما این کدها کامل نیستند اگر شما اخطار‌های gcc را فعال کنید به شما گفته خواهد شد چه کمبود‌هایی وجود دارد. با اضافه کردن گزینه‌ی Wall- به فرمان کامپایل می‌توانیماخطار‌های gcc
را فعال می کنیم:

فعال کردن نمایش اخطارها

mety@localhost:~/$ gcc -Wall tiny.c

tiny.c:2: warning: return-type defaults to `int'

tiny.c: In function `main':

tiny.c:3: warning: control reaches end of non-void function

mety@loclhost:~/$

دلیل نمایش داده شدن این پیغام‌ها کامل نبودن برنامه‌ی نوشته شده توسط ماست. برای رهایی از این پیغام‌ها باید با افزودن سازوکارهای جدید برنامه‌ای کامل‌تر ایجاد کنیم. در اینجا با افزودن دو سطر جدید به برنامه، آن را به کوتاهترین برنامه معتبر C تبدیل می‌کنیم:
نمونه  tiny2.c

int

main()

{

  return 0;

}    

حالا برنامه را با گزینهWall- کامپایل می کنیم و شاهد این خواهید بود که پیام خطایی نمایش داده نمی‌شود. گزینه‌ی مفید دیگر o filename- است که نام فایل خروجی را ( به جای a.out) مشخص می‌کند.

mety@localhost:~/$ gcc -Wall -o tiny-program tiny2.c

mety@localhost:~/$ ls

tiny2.c  tiny-program

mety@localhost:~/$ ./tiny-program

mety@localhost:~/$

برنامه سلام

هر برنامه C ملزم به داشتن تابعی به نام ()main است. اجرای برنامه از این تابع شروع می شود. می توان تمامی کدهای برنامه را در تابع ()main قرار داد اما روش مرسوم تر تقسیم برنامه به چندین تابع کوچک است. به عنوان اولین قطعه کد مفید در این مقاله به یک نمونه کلاسیک نگاه می اندازیم. سپس از کامپایل و اجرا برنامه یک پیام ساده روی صفحه نمایش شما چاپ می‌کند. برنامه تابعی به نام ()main را تعریف (define) و تابعی به نام ()printf را فراخوانی (call) می‌کند. ()prinf تابعی است که توسط کتابخانه ابزار ورودی/خروجی استاندارد (Standard Device Input/Output library) فراهم می شود که‌این کتابخانه به همراه هر سیستم GNU وجود دارد. متن برنامه کوچک ما به صورت زیر است:

نمونه  hello.c

#include

 

int main()

{

  printf("hello, world");

 

  return 0;

}

حالا برنامه را کامپایل و اجرا کنید. اگر همه چیز درست باشد عبارت “hello, world” بر روی ترمینال شما (ابزار خروجی استاندارد ) نمایش داده خواهد شد. در صورتیکه فرامین مربوط به کامپایل و اجرای برنامه را فراموش کرده‌اید آنها به صورت زیر هستند :
فرامین کامپایل و اجرای برنامه

mety@localhost:~/$ gcc -Wall -o hello hello.c

mety@localhost:~/$ ./hello

hello, world

mety@localhost:~/$

اگر شما هرگونه پیام خطا و یا اخطار را مشاهده می کنید دقت کنید که کدهای شما دقیقا مطابق کدهای این کتاب باشد. هر پیام خطایی که دریافت کنید سطری را که در آن مرتکب اشتباه شده‌اید به شما اعلام می‌کند. در صورتیکه کدها را صحیح تایپ کرده باشید چنین پیام‌هایی را دریافت نخواهید کرد.

فایل‌های چندگانه

اجباری برای اینکه برنامه‌ها تنها در یک فایل معین نوشته شوند وجود ندارد. کدهای شما میتوانند در هر تعداد فایل که بخواهید پخش شوند. به عنوان نمونه اگر برنامه‌ای از ۴۰ تابع تشکیل شده باشد شما می توانید هر تابع را در یک فایل جداگانه قرار دهید؛ اگر چه این کار یک افراط در تکه تکه کردن برنامه است. غالبا توابع بر حسب موضوع در گروه‌هایی دسته بندی شده و در فایل‌های جداگانه قرار می گیرند. برای نمونه در صورتیکه وظیفه یک برنامه محاسبه قیمت یک پیتزا و نمایش نتیجه است شما می توانید توابع مربوط به محاسبه قیمت را در یک فایل و توابع نمایش نتایج را در فایل دیگری قرار داده و از فایل سوم برای نگهداری تابع ()main استفاده کنید. حال می توانید از فرمان زیر برای کامپایل برنامه استفاده کنید:
کامپایل برنامه تشکیل شده از سه فایل

mety@localhost:~/$ gcc -o pizza_program main.c prices.c display.c     

یاد آوری می کنیم در صورتیکه تابعی را در prices.c تعریف و قصد فراخوانی آن را در main.c دارید باید آنرا در main.c اعلان کنید.

فایل‌های سرآیند

ادامه پیگیری اعلان توابع می تواند موجب شلوغ کاری شود. به همین دلیل فایل‌های سرآیند برای جا دادن کدهای C که شما قصد به کارگیری آنها در فایل‌های چندگانه را دارید استفاده می شوند. قبل از این شما به طور عملی از یک فایل سرآیند به نام stdio.h استفاده کردید، این فایل سرآیند شامل اعلان توابع بسیار زیادی است. از جمله شامل تابع ()printf و نیز اعلان آن است. شما نیز می توانید یک فایل سرآیند شامل اعلان توابعی که قصد به اشتراک گذاری آنها را دارید ایجاد کنید و سپس با استفاده از include# آن را در اختیار هر فایل C که به اطلاعات آن احتیاج دارد قرار دهید. تنها تفاوت موجود در این است که شما باید به جای علائم < و > نام فایل خود را بین دو "،" یا کوتیشن مارک قرار دهید. یعنی از "my_header.h" به جای استفاده کنید.

کامپایل این برنامه به صورت زیر است :

mety@localhost:~/$ gcc -Wall -o pizza_program main.c prices.c display.c     

 

 

تگ های این مطلب :برنامه نویسی ‍‍c در لینوکس
و تگ های این مطلب :c programming on linux
و تگ های این مطلب :برنامه نویسی در لینوکس
و تگ های این مطلب :c programming
نویسنده : Fatal Error | ساعت ٥:۱٥ ‎ق.ظ روز ۱۳۸٧/٧/۸
پيام هاي ديگران () | لینک ثابت

  مقدمه ای بر زبان C

زبان ‏C توسط Dennis Ritchie بین سالهای ۱۹۶۹ تا ۱۹۷۳ ابداع شد؛ در سال ۱۹۷۸ دنیس ریچی به همراه Brian Kernighan یک کتاب آموزشی بسیار خوب برای C با نام "The C programming language"منتشر کرد. این کتاب در واقع اولین تعریف رسمی از این زبان بود و از آنجا که نوع اصلی C محسوب می شود گاهی اوقات به آن C سنتی می گویند. متاسفانه‌این کتاب بسیاری از جنبه‌های این زبان را تعریف نشده باقی گذاشت. بنابر این افرادی که کامپایلر‌ها را می نوشتند مجبور بودند خود در مورد چگونگی رفتار با این جنبه‌ها تصمیم گیری کنند. نتیجه‌ی ‌این رفتار وابستگی شدید C و واکنش آن به کدها به نوع کامپایلر مورد استفاده بود. ممکن بود کدی که در یک کامپایلر نتیجه‌ای مطلوب می‌دهد در کامپایلر دیگری نتایج متفاوتی را در بر داشته باشد. استفاده از این لهجه مدت زیادی طول نکشید. gcc تنها برای کامپایل برنامه‌های خیلی قدیمی از آن پشتیبانی می کند و ما تنها به خاطر مقاصد تاریخی به آن اشاره کردیم.

‏نسخه‌ی ISO C

در سال ۱۹۸۳ موسسه استاندارد ملی آمریکا (ANSI) کمیته‌ای را به منظور تدوین یک استاندارد صحیح و رفع برخی کاستی‌ها ی زبان C تشکیل داد. کار تدوین این استاندارد در سال ۱۹۸۹ به پایان رسید و مورد پذیرش سازمان بین المللی استاندارد یا (ISO) نیز قرار گرفت. این لهجه جدید با نام C89 شناخته شد. همچنین از آن به عنوان ISO C و ANSI C نیز یاد می شود. gcc یکی از سازگارترین کامپایلر‌های موجود با این لهجه است.

C99

کمیته ANSI C جلسات بسیار کمی را برای ارتقای این زبان تشکیل می دهد. آخرین استاندارد ارتقا یافته در سال ۱۹۹۹ عر ضه شد که با نام C99 شناخته می شود. تاکنون کامپایلر‌های بسیار کمی به طور کامل از C99 پشتیبانی می کنند زیرا ایجاد تغییرات در یکی از مهمترین نرم افزار‌های سیستم عامل کار زمان گیری است. تا زمان نگارش این مقاله پشتیبانی gcc از C99 تا حد قابل توجهی کامل شده است اما توسعه دهندگان هنوز مشغول کار بر روی آن هستند.

GNU C

GNU C بسیار شبیه C89 است اما دارای برخی خصیصه‌های جدید از C99 و برخی امکانات فرعی اضافه (extension) دیگر است. امکانات فرعی برای رفع برخی اشکالاتی که C99 راه حل مناسبی برای آنها ارایه نکرده توسط توسعه دهندگان ارایه شده اند. GNU C نوع پیش فرض gcc است .

آینده استانداردها

امکانات فرعی اضافه از قبیل آنهایی که توسط gcc اضافه می شوند منابع الهام اصلی ISO برای استاندارد‌های جدید C هستند. زمانی که گروه ANSI C مشاهده می کنند تعداد زیادی از کامپایلر‌ها یکی از امکانات فرعی اضافه را به کار می گیرند آنها لزوم وجود آن امکان را بررسی می نمایند و در صورتیکه آنرا مفید تشخیص دهند یک را استاندارد برای به کار گیری آن ارایه می دهند. برخی از امکانات فرعی اضافه شده توسط gcc ممکن است در آینده به صورت استاندارد در آیند و برخی دیگر ممکن است اینگونه نباشند.

تگ های این مطلب :مقدمه ای بر زبان c
و تگ های این مطلب :c programming
نویسنده : Fatal Error | ساعت ٥:۱۳ ‎ق.ظ روز ۱۳۸٧/٧/۸
پيام هاي ديگران () | لینک ثابت