![]() |
![]() |
|
| آموزش برنامه نویسی |
|
استفاده از این کتابها و پروژه ها و مطالب آموزشی کمک آموزشی خوبی برای برنامه نویسی ویژوال بیسیک و دات نت است.
|
|
+ نوشته شده در
شنبه هفدهم آذر 1386ساعت 1:36 توسط نیما محمدی |
|
|
+ نوشته شده در
شنبه هفدهم آذر 1386ساعت 0:21 توسط نیما محمدی |
|
|
مطالب عمومی در مورد برنامهنويسی در لينوكس http://www.tldp.org/LDP/lpg/index.html راهنمای برنامهنويسی در لينوكس. http://www.newriders.com/books/opl/ebooks/0735710430.html يك كتاب جامع و مفيد برای برنامهنويسان حرفهای لينوكس. http://www.luv.asn.au/overheads/prog مقدماتی در مورد برنامهنويسی در محيطهای لينوكس و يونيكس. http://members.tripod.com/rpragana يادداشتهای يك برنامهنويس لينوكس با عنوان رويدادهای برنامهنويسی لينوكس. http://tldp.org مجموعهای از لينكها به منابع برنامهنويسی در لينوكس.
برنامهنويسی به زبان اسمبلی http://linuxassembly.org مجموعهای از منابع و راهنماها برای نوشتن برنامههای اسمبلی در محيط سيستمعاملهای خانواده يونيكس. http://x86.ddj.com/secrets/intelsecrets.htm دانستنیهايی در مورد پردازندههای اينتل و برنامهنويسی اسمبلی روی آنها. http://tldp.org/HOWTO/Assembly-HOWTO/index.html راهنمای برنامهنويسی اسمبلی در محيط لينوكس. http://burks.bton.ac.uk/burks/language/asm/asmtut/asm1.htm راهنمايی برای اسمبلی ماشينهای 80x86 http://www.xs4all.nl/~smit/asm01001.htm راهنمای برنامهنويسی اسمبلی 8086
http://www.kerneli.org يك API برای رمزنگاری اطلاعات در لينوكس. http://www.openssl.org برنامه سورس-آزاد OpenSSL برای انتقال امن اطلاعات.
پايگاههای داده http://www.sleepycat.com پايگاهداده سورسآزاد دانشگاه بركلی. http://www.mysql.com پايگاهداده معروف و پرطرفدار mysql . http://www.postgresql.org پايگاهداده PostgreSQL .
برنامهنويسی توزيعشده (Distributed) http://linas.org/linux/corba.html منابعی در مورد پيادهسازی استاندارد CORBA در لينوكس. http://www.mico.org پيادهسازی MICO از استاندارد CORBA . http://www.dotgnu.org ديدن اين سايت را به علاقهمندان تكنولوژی .NET توصيف میكنيم. http://www.go-mono.org اين سايت نيز تلاش دارد يك زيرساخت برای توليد برنامههای .NET ايجاد كند.
ويرايشگرهای با پشتيبانی زبانهای برنامهنويسی http://www.gnu.org/software/emacs ويرايشگر معروف Emacs. در مورد اين ويرايشگر در شمارههای آينده مطلبی خواهيم داشت. http://nedit.org يك ويرايشگر گرافيكی برای ويرايش فايلها در محيط لينوكس. http://www.vim.org ويرايشگر بینظير VIM. اين ويرايشگر را نيز در آينده بيشتر معرفی خواهيم كرد.
برنامهنويسی بازیها http://lgdc.sunsite.dk سايتی برای برنامهنويسان بازیها در لينوكس. http://game.ncl.ac.uk صفحهای متعلق به بازینويسان در محيط X11 .
برنامهنويسی در محيط GNOME http://developer.gnome.org سايت اصلی برنامهنويسان در محيط Gnome
برنامهنويسی KDE در لينوكس http://developer.kde.org سايت برنامهنويسان KDE http://www.ph.unimelb.edu.au/~ssk/kde/devel سايتی ديگر برای برقراری ارتباط ميان برنامهنويسان KDE
برنامهنويسی گرافيكی در لينوكس http://www.faqs.org/faqs/graphics/fileformats-faq منبعی در مورد فرمت فايلهای گرافيكی. http://www.mesa3d.org سايت پروژه Mesa كه در شمارههای گذشته معرفی شد. http://www.inria.fr/koala/lehors/xpm.html اطلاعاتی در مورد فرمت XPM و كتابخانهای برای كار با اين فرمت.
برنامهنويسی روی سختافزارها http://en.tldp.org/HOWTO/mini/IO-Port-Programming.html معرفی روشهای برنامهنويسی پورتهای I/O در لينوكس. http://en.tldp.org/HOWTO/SCSI-Programming-HOWTO.html روشهای برنامهنويسی SCSI (اسكازي) در محيط لينوكس. http://en.tldp.org/HOWTO/Serial-Programming-HOWTO/index.html روشهای برنامهنويسی روی پورت سريال در لينوكس.
برنامهنويسی IPC: InterProcess Communication http://www.ecst.csuchico.edu/~beej/guide/ipc منبعی خوب برای برنامهنويسی IPC
IDEهای لينوكس http://anjuta.sourceforge.net پروژه Anjuta كه در شمارههای بعدی بيشتر معرفی خواهد شد. http://www.kdevelop.org محيط برنامهنويسی ويژوال كه در آينده به تفصيل معرفی خواهد شد. http://starship.python.net/crew/zack/ptui واسط كاربری برای برنامهنويسی Python/Tkinter http://www.rhide.com يك IDE برای نوشتن برنامه به زبانهای C، C++ و پاسكال. http://www.neuron.com/stewart/vtcl يك IDE ويژوال برای برنامهنويسی TCL .
برنامهنويسی جاوا http://leb.net/freebuilder يك پروژه برای ايجاد يك IDE برای برنامهنويسی جاوا در محيط لينوكس. http://www.japhar.org اين پروژه در پی ايجاد يك مفسر مستقل از محيط (Portable Interpreter) برای بايتكدهای جاوا است. . http://developer.java.sun.com/developer سايتی برای برقراری ارتباط ميان برنامهنويسان جاوا. http://www.blackdown.org منبعی برای برنامهنويسی جاوا در محيط لينوكس. http://www.kaffe.org يك پيادهسازی سورسآزاد از ماشين مجازی جاوا.
زبانهای برنامهنويسی http://www.vaxxine.com/pegasoft/homes/book.html يك كتاب آنلاين كامل درباره زبان برنامهنويسی Ada http://gcc.gnu.org سايت اصلی كامپايلر GCC (در شمارههای بعد معرفی خواهد شد). http://gnu-pascal.de سايت زبان پاسكال در محيط لينوكس http://www-aig.jpl.nasa.gov/public/home/decoste/HTMLS/GNU/smalltalk/mst_toc.html راهنمای برنامهنويسی SmallTalk در محيط لينوكس
كتابخانههای برنامهنويسی http://www.gnu.org/manual/glibc-2.2.3/libc.html راهنمای استفاده از GNU libc http://www.imaxx.net/~thrytis/glibc/glibc-FAQ.html در مورد كتابخانه GNU libc http://en.tldp.org/HOWTO/NCURSES-Programming-HOWTO/index.html راهنمای برنامهنويسی با استفاده از كتابخانه Ncurses كه در شمارههای بعدی بيشتر معرفی خواهد شد. http://www.s-lang.org يك كتابخانه برای كمك به برنامهنويسان در نوشتن برنامههای قابل انتقال http://pauillac.inria.fr/~xleroy/linuxthreads كتابخانهای برای برنامهنويسی Thread در لينوكس
برنامهنويسی مولتیمديا در لينوكس http://leapster.org/linux/cdrom برنامهنويسی روی CD Drive در لينوكس. http://www.libsdl.org كتابخانه SDL كه در شمارههای قبل معرفی شد.
برنامهنويسی شبكه http://www.lowtek.com/sockets سايتی مناسب برای يادگيری برنامهنويسی شبكه در سيستمعاملهای مختلف. http://www.ecst.csuchico.edu/~beej/guide/net راهنمای برنامهنويسی شبكه. http://www.landfield.com/faqs/unix-faq/socket FAQ در مورد سوكتهای يونيكسی كه روشی پركاربرد برای برنامهنويسی شبكه در لينوكس است.
برنامهنويسی سيستمعامل http://en.tldp.org/LDP/lki/index.html دانستنیهايی در مورد پيادهسازی نگارش 2.4 از هسته لينوكس. http://www.ora.com/catalog/linuxdrive : Device Driverهای نوشته شده برای محيط لينوكس. http://www.linuxhq.com/guides/TLK/tlk.html كتابی خواندنی و ساده در مورد هسته لينوكس. http://www.linuxhq.com/guides/LPG/lpg.html راهنمايی برای برنامهنويسی در محيط لينوكس. http://en.tldp.org/LDP/lkmpg/mpg.html راهنمايی برای نوشتن ماجولهای هسته در لينوكس. در مورد ماجولها و نحوه نوشتن آنها در شمارههای آينده بيشتر خواهيم گفت. http://leapster.org/linux/kernel پروژه مستندسازی هسته لينوكس كه میتواند به برنامهنويسان هسته لينوكس در فهم كد آن كمك كند.
سايتهای مخصوص برنامهنويسان لينوكس http://programmers.luv.asn.au سايت برنامهنويسان LUV http://www.pm.org سايت برنامهنويسان Perl
قالبهای برنامهنويسی (Coding Style) http://www.coker.com.au/~russell/ccode توصيههای در مورد قالب نوشتن برنامههای C . http://www.purists.org/linux معرفی قالب به كار رفته برای نوشتن كد هسته لينوكس . http://www.ee.ryerson.ca:8080/~elf/hack/The10.html ده توصيف برای برنامهنويسان زبان C .
ايجاد برنامههای امن (Security Programming) http://www.whitefang.com/sup/secure-faq.html : FAQ در مورد نوشتن برنامههای امن در سيستمعاملهای مبتنی بر يونيكس.
توسعه نرمافزار http://ant.apache.org برنامهای برای كامپايل كردن برنامهها و ايجاد كد اجرايي. http://sources.redhat.com/autobook منبعی در مورد برنامههای autoconf، automake و libtool كه در شمارههای بعدی بيشتر معرفی خواهند شد. http://nis-www.lanl.gov/~rosalia/mydocs/autoconf_tutorial_toc.html منبعی ديگر در مورد برنامه autoconf http://www.eng.auburn.edu/grasp يك محيط توليد و نگهداری نرمافزار. http://www.gnu.org/software/make/make.html منبعی در مورد برنامه make كه در شمارههای بعدی بيشتر معرفی خواهد شد.
ارائه نرمافزار به ديگران http://www.rpm.org سايت اختصاصی برنامه RPM برای ايجاد بستههای نرمافزاري. http://www.openpkg.org يك ابزار برای تبديل برنامهها به بسته نرمافزاری كه مبتنی بر RPM نگارش 4 ايجاد شده است و سعی در ارائه قابليتهای بيشتری نسبت به آن دارد.
نبشتهنويسی http://en.tldp.org/LDP/abs/html/index.html راهنمای برنامهنويسی Bash . http://www.sektorn.mooo.com/era/unix/shell.html معرفی shellهای سيستمعاملهای مبتنی بر يونيكس . http://steve-parker.org/sh/sh1.shtml خودآموز برنامهنويسی shell
برنامهنويسی صوتی http://www.alsa-project.org/api.php3 : ALSA API برای برنامهنويسی صوتي. http://www.4front-tech.com/pguide راهنمای برنامهنويسان پروژه Open Sound System
برنامهنويسی واسط كاربر http://www.cs.cmu.edu/afs/cs.cmu.edu/project/amulet/www يك كتابخانه برای توليد واسط كاربر در محيطهای مبتنی بر يونيكس، ويندوز و مكينتاش. http://www.fox-toolkit.org/fox.html يك كتابخانه برنامهنويسی مبتنی بر C++ برای توليد واسط كاربر گرافيكي. http://www.gtk.org كتابخانه توليد واسط كاربر گرافيكی در محيط Gnome http://www.troll.no كتابخانهای برای توليد واسط كاربر برای محيط KDE http://world.std.com/~xforms كتابخانهای مبتنی بر Xlib برای توليد واسط كاربر گرافيكي
برنامهنويسی XML http://www.jclark.com/xml/expat.html يك كتابخانه برنامهنويسی برای ايجاد پارسر XML http://xmlsoft.org كتابخانه زبان C برای محيط Gnome به نام libxml .
برنامهنويسی X Window http://www.rahul.net/kenton/xsites.html سايتهای فنی در مورد سيستم X Window . |
|
+ نوشته شده در
چهارشنبه چهاردهم آذر 1386ساعت 0:27 توسط نیما محمدی |
|
|
گوشی مجانی |
|
+ نوشته شده در
جمعه دوم آذر 1386ساعت 1:3 توسط نیما محمدی |
|
|
مقدمه به آموزش GNU C خوش آمدید. هدف از نوشتن این مقاله آموزش نوشتن نرم افزار به کمک زبان برنامه نویسی C به کاربران سیستمهای GNU است. اصولا این مقاله به عنوان خود آموز برای افراد مبتدی نوشته شده امابرای استفاده به عنوان مرجع توسط کاربران با تجربه نیز قابل استفاده است. 2- مفاد این متن مطالب این مقاله می توانند به دو بخش تقسیم شوند : الف. هسته زبان سی و ب. توابع استاندارد ارایه شده برای برنامه نویسان. این توابع توسط کتابخانه توابع سی یا GNU libc فراهم شده اند که بخشی از هر سیستتم GNU/Linux می باشد. هیچ کدام از این دو بخش بدون دیگری استفاده نمیشود اما در این مقاله در شروع تمر کز بر روی هسته زبان C و در بخشهای آخر بحثهای بیشتری در مورد libc خواهد بود. سازماندهی مطالب به گونهای است تا آموزش برنامه نویسی C در یک حالت صعودی انجام شود به گونهای که مطالب هر فصل بر روی فصل قبلی بنا می شود. برخی جنبههای هسته زبان برای کاربران با تجربه کاربرد دارند بنابراین در فصلهای پایانی ذکر خواهند شد. زبان C به خودی خود می تواند ساختارهای تصمیم گیری و تکرار دستورات را ایجاد کند و ذخیره سازی دادهها و محاسبات ریاضی را انجام دهد. با همین اهمیت یک روش برای استفاده از توابع خارجی نظیر libc را فراهم میکند. libc توابعی برای کارهای نظیر خواندن و نوشتن فایلها - دسته بندی و جست و جوی داده - دریافت ورودی برای کاربر و نمایش داده برای او - ارتیاط از طریق شبکه - ساخت برنامههای قابل ترجمه و غیره فراهم میکند. 3-چرا زبان برنامه نویسیC برای آموزش؟ زبان برنامه نویسی C استاندارد است. C زبان استاندارد برنامه نویسی سیستمهای بر پایه GNU و BSD است. اغلب این سیستم عاملها به همراه برنامههای کاربردی که بر روی آنها اجرا می شوند به زبان C نوشته شده اند. C بیش از سی سال پیش برای نوشتن سیستمهای عامل و برنامههای کاربردی شروع به توسعه یافت. C کوچک است. طراحی قابل بسط به آن این امکان را داد تا به همراه صنعت کامپیوتر توسعه پیدا کند. به دلیل قدمت و محبوبیت C زبانی دارای پشتیبانی بسیار خوب است. ابزارهای زیادی به وجود آمده اند تا برنامه نویسی C را آسان تر کنند . و این ابزارها غالبا بسیار کامل و استاندارد هستند. غریب به اتفاق نرم افزارهایی که ما در این مقاله از آنها استفاده خواهیم کرد با C نوشته شدهاند. 4- چرا استفاده از سیستم عامل GNU ؟ سیستم عامل GNU/Linux یک سیستم عامل شبه Unix است که بیش از بیست سال پیش شروع به توسعه کرد. شروع توسعهی این سیستم عامل پرژهی GNU است که ریچارد استالمن آن را برای فراهم آوردن آزادی نرمافزارها ایجاد کرد. پس از مدتی با فراهم شدن هستهای به نام Linux از سوی لینوس ترووالدز سیستم عامل GNU/Linux شروع به کار نمود. نرمافزارهای مورد استفاده در سیستم GNU و سیستم عامل GNU/Linux به دلیل آزاد بودن (و متعاقبا اوپن سورس بودن) نرم افزارهایی با پایداری و قابلیت اطمینان و منطبق بر استانداردها هستند. اغلب سیستمهای GNU از Linux به عنوان هسته استفاده می کنند. این سیستمها غالبا به عنوان سیستمهای GNU/Linux شناخته می شوند. (برای دریافت اطلاعات بیشتر میتونید مقالهی لینوکس چیست را در همین سایت مطالعه کنید.) 5- چرا نرم افزار آزاد؟ مهمترین مطلب دربارهی GNU فراهم آوردن نرمافزارهایی آزاد است؛ یک نرم افزار زمانی یک نرم افزار آزاد است که چهار شرط را برای کاربران فراهم کند :
یک زبان برنامه نویسی قالبی برای طرح ریزی برای اجرای موارد سفارش داده شده توسط کامپیوتر تعریف میکند. زبانهای برنامه نویسی به سه دسته تقسیم می شوند. ۱.زبانهای ترجمهای ۲. زبانهای کامپایل شده و ۳.زبان ماشین. از این میان تنها زبان ماشین به طور مستقیم توسط کامپیوتر قابل فهم است. data = 10 + 200; که بر عبارت زیر ارجحیت دارد: Load R1, 10 Load R2, 200 Addi R1, R2 Store R2, L1 1.2 زبان C چیست ؟ سپس ابزاری که کامپایلر نامیده می شود برای تبدیل کدهای سطح بالا به زبان ماشین استفاده می شود. یک برنامه می تواند به زبان C نوشته شده و سپس برای هر کامپیوتری کامپایل شود. درگیری با جزییات سخت افزاری بر عهده کامپایلر است. برای مقایسه برتری زبان C بر Assembly به یک برنامه کوچک که در هر دو زبان نوشته شده نگاه کنید: .section .rodata
.LC0:
.string "Tax Due: %d "
.text
.align 2
.globl main
.type main,@function
main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
movl $1000, %eax
movl $400, %edx
movl $0x3e6147ae, -12(%ebp)
subl %edx, %eax
pushl %eax
fildl (%esp)
leal 4(%esp), %esp
fmuls -12(%ebp)
fnstcw -18(%ebp)
movw -18(%ebp), %ax
movb $12, %ah
movw %ax, -20(%ebp)
fldcw -20(%ebp)
fistpl -16(%ebp)
fldcw -18(%ebp)
subl $8, %esp
pushl -16(%ebp)
pushl $.LC0
call printf
addl $16, %esp
movl $1, %eax
leave
ret
.Lfe1:
.size main,.Lfe1-main
همان برنامه اینبار که اینبار به زبان C نوشته شده است : #include بدون شناخت از زبان C شما کدام برنامه را برای خواندن آسانتر می دانید؟ خروجی هر دو برنامه مشابه است : "Tax Due: 131 euro" کد Assembly نشان داده شده که در مجموعه راهنمایی 80386 نوشته شده در ماشینی که از مجموعه راهنمایی دیگری استفاده می کند کار نخواهد کرد . اما کد C می تواند عملا برای هر کامپیوتر با هر معماری پردازشگری کامپایل شود. 1.3 ابزارهای برنامه نویسی سیستمهای GNU به همراه کامپایلری به نام gcc ارایه می شود. gcc از ابتدا مخفف GNU C Compiler بود ولی پس از مدتی که قابلیت کامپایل زبانهای دیگری غیر از C به آن افزوده شد نام آن را GNU Compiler Colection خطاب میکنند. پدید آورندهی اصلی GCC ریچارد استالمن، بناینگذار پروژه GNU است. نخستین نسخه GCC در سال ۱۹۸۷ انتشار یافت که یک پیشرفت مهم و اساسی در پیشبرد اهداف GNU Project محسوب میشد زیرا محصول جدید اولین کامپایلر بهینه سازی شده قابل حمل ANSI C به عنوان یک نرم افزار آزاد محسوب می شد. در سال ۱۹۹۲ نسخه 2.0 کامپایلر GCC عرضه شد. نسخه جدید قابلیت کامپایل کدهای ++C را نیز داشت.
نسخهای از gcc که شما استفاده می کنید ممکن است متفاوت باشد. هر چیزی شبیه این از قبیل 3.4.6 یا 4.1.1 مناسب است. اگر پیغام خطای " command not found" را دریافت می کنید، شما gcc را نصب نکردهاید. اگر لینوکستان را از روی cd نصب کردهاید می توانید gcc را در آن پیدا کنید. اگر شما نمیدانید چگونه باید gcc را در سیستم خود نصب کنید میتوانید از طریق انجمنهای مختلف موجود در اینترنت اقدام نمایید. کافیست در این انجمنها پرسش خود را بپرسید تا کسانی اطلاعاتی در این زمینه دارند به شما کمک کنند. (برای نمونه میتوانید به انجمنهای سایت گنوایران. ارگ مراجعه کنید.) 1.4 معرفی کامپایلر gcc بسیار خوب، می خواهیم کامپایل کردن یک تکه کوچک کد C را از طریق gcc به شما نشان دهیم. اینجا هدف آموزش نحوه استفاده از gcc است بنابر این در این بخش به شرح سازوکار کد C نمیپردازیم. در نمونه ۱.۳ کوچکترین قطعه کد C که gcc قادر به کامپایل آن است را می بینید. این کد هیچ کاری انجام نمی دهد. main()
{
}
این قطعه کد را در ویرایشگر متن خود تایپ و با نام tiny.c ذخیره کنید. شما می توانید هر نام دیگری را نیز که به پسوند c. ختم می شود انتخاب کنید. این پسوندی است که برای سورس کدهای نوشته شده با C استفاده می شود. gcc برای کامپایل یک برنامه صحت این پسوند را چک میکند. با در اختیار داشتن یک فایل ذخیره شده حالا می توانید به وسیله دستور زیر آنرا کامپایل کنید:
در صورتیکه کهاین فرمان با موفقیت انجام شود بدون پیغام خروجی خواهد بود. در صورتیکه هر گونه پیغام خطایی را دریافت کردید باید صحت برنامه خود را چک کنید. در صورتیکه فرض کنیم شما این برنامه هشت کاراکتری را درست نوشته باشید باید فایلی به نام a.out در دایرکتوری شما ایجاد شود. این برنامه زبان ماشینی است که از کدهای بالا ساخته شده است. در صورتیکه آنرا اجرا کنید خواهید دید که در واقع هیچ فعالیتی انجام نمی دهد. نامگذاریa.out دلایل تاریخی دارد، اما مخفف output Assembler میباشد.
دلیل نمایش داده شدن این پیغامها کامل نبودن برنامهی نوشته شده توسز ماست. برای رهایی از این پیغامها باید با افزودن سازوکارهای جدید برنامهای کاملتر ایجاد کنیم. در اینجا با افزودن دو سطر جدید به برنامه، آن را به کوتاهترین برنامه معتبر C تبدیل میکنیم:
حالا برنامه را با گزینهWall- کامپایل می کنیم و شاهد این خواهید بود که پیام خطایی نمایش داده نمیشود. گزینهی مفید دیگر o filename- است که نام فایل خروجی را ( به جای a.out) مشخص میکند.
برای شما به عنوان یک برنامه نویس C معتبر توسط کامپایلر تعریف می شود. لهجههای مختلف زیادی از C وجود دارد. (یا بهتر است بگوییم انواع مختلفی از زبان C موجود هستند.) خوشبختانه اغلب این انواع بسیار به یکدیگر شباهت دارند. همچنین زبانهای دیگری نیز وجود دارند که بر پایه C ساخته شده اند مانند Objective C و ++C. این زبانها در ظاهر بسیار شبیه C هستند اما کاربردی متمایز دارند. gcc خیلی از لهجههای زبان C را به خوبی خیلی از زبانهای دیگر از قبیل ++C و Obcetive C می فهمد. ( انواع C در IBM) 1.5.1 Keringhan و Ritchie زبان C توسط Dennis Ritchie بین سالهای ۱۹۶۹ تا ۱۹۷۳ ابداع شد؛ در سال ۱۹۷۸ دنیس ریچی به همراه Brian Kernighan یک کتاب آموزشی بسیار خوب برای C با نام "The C programming language"منتشر کرد. این کتاب در واقع اولین تعریف رسمی از این زبان بود و از آنجا که نوع اصلی C محسوب می شود گاهی اوقات به آن C سنتی می گویند. متاسفانهاین کتاب بسیاری از جنبههای این زبان را تعریف نشده باقی گذاشت. بنابر این افرادی که کامپایلرها را می نوشتند مجبور بودند خود در مورد چگونگی رفتار با این جنبهها تصمیم گیری کنند. نتیجهی این رفتار وابستگی شدید C و واکنش آن به کدها به نوع کامپایلر مورد استفاده بود. ممکن بود کدی که در یک کامپایلر نتیجهای مطلوب میدهد در کامپایلر دیگری نتایج متفاوتی را در بر داشته باشد. استفاده از این لهجه مدت زیادی طول نکشید. gcc تنها برای کامپایل برنامههای خیلی قدیمی از آن پشتیبانی می کند و ما تنها به خاطر مقاصد تاریخی به آن اشاره کردیم. 1.5.2نسخهی ISO C در سال ۱۹۸۳ موسسه استاندارد ملی آمریکا (ANSI) کمیتهای را به منظور تدوین یک استاندارد صحیح و رفع برخی کاستیها ی زبان C تشکیل داد. کار تدوین این استاندارد در سال ۱۹۸۹ به پایان رسید و مورد پذیرش سازمان بین المللی استاندارد یا (ISO) نیز قرار گرفت. این لهجه جدید با نام C89 شناخته شد. همچنین از آن به عنوان ISO C و ANSI C نیز یاد می شود. gcc یکی از سازگارترین کامپایلرهای موجود با این لهجه است. 1.5.3 C99 کمیته ANSI C جلسات بسیار کمی را برای ارتقای این زبان تشکیل می دهد. آخرین استاندارد ارتقا یافته در سال ۱۹۹۹ عر ضه شد که با نام C99 شناخته می شود. تاکنون کامپایلرهای بسیار کمی به طور کامل از C99 پشتیبانی می کنند زیرا ایجاد تغییرات در یکی از مهمترین نرم افزارهای سیستم عامل کار زمان گیری است. تا زمان نگارش این مقاله پشتیبانی gcc از C99 تا حد قابل توجهی کامل شده است اما توسعه دهندگان هنوز مشغول کار بر روی آن هستند. 1.5.4 GNU C GNU C بسیار شبیه C89 است اما دارای برخی خصیصههای جدید از C99 و برخی امکانات فرعی اضافه (extension) دیگر است. امکانات فرعی برای رفع برخی اشکالاتی که C99 راه حل مناسبی برای آنها ارایه نکرده توسط توسعه دهندگان ارایه شده اند. GNU C نوع پیش فرض gcc و نیز لهجهایست که ما در این مقاله به کار خواهیم برد. ما نهایت تلاش خود را خواهیم کرد تا در مواقعی که از امکانات فرعی GNU C استفاده می کنیم آنها را مشخص کنیم هر چند به طور کلی استفاده کامل از GNU C بهتر است زیرا استفاده از ISO C باعث محدود شدن برنامههای شما به استفاده از جنبههای مشترک می گرددو کابرد آنها را محدود به موارد معینی می سازد. 1.5.5 انتخاب یک نوع C در صورتیکه میخواهید لهجهای غیر از لهجه پیش فرض انتخاب کنید می توانید با گزینهی =std- انتخاب خود را مشخص کنید. به دنبال این گزینه میتوانید یکی از گزینههایc89 ، c99 GNU89 و GNU99 را وارد کنید. GNU89 در حال حاظر گزینه پیش فرض است تا زمانی که پشتیبانی از c99 تکمیل شود. در آن صورت GNU99 گزینه پیش فرض خواهد شد. در هر صورت تغییرات چندان قابل توجه نخواهد بود. 1.5.6 آینده استانداردها امکانات فرعی اضافه از قبیل آنهایی که توسط gcc اضافه می شوند منابع الهام اصلی ISO برای استانداردهای جدید C هستند. زمانی که گروه ANSI C مشاهده می کنند تعداد زیادی از کامپایلرها یکی از امکانات فرعی اضافه را به کار می گیرند آنها لزوم وجود آن امکان را بررسی می نمایند و در صورتیکه آنرا مفید تشخیص دهند یک را استاندارد برای به کار گیری آن ارایه می دهند. برخی از امکانات فرعی اضافه شده توسط gcc ممکن است در آینده به صورت استاندارد در آیند و برخی دیگر ممکن است اینگونه نباشند. 1.6 خاتمه در این جا معرفی ما خاتمه می یابد. با امید بهاینکه دید صحیحی درباره زبان برنامه نویسی C بدست آورده باشید، دربخش بعدی به نوشتن برنامههای پایهای تشریح نحوه عمل کرد این برنامهها خواهیم پرداخت.
توابع بلوکهای ساختاری برنامههای C هستند. اکثریت برنامههای C از بلوکهایی از کد که تابع(function) نامیده می شوند ساخته می شوند. وقتی یک برنامه را می نویسید شما توابع زیادی را برای انجام وظایفی که احتیاج دارید ایجاد خواهید کرد. علاوه بر این تعداد زیادی از وظایف عمومی از قبیل نمایش یک متن بر روی صفحه نمایش وجود دارند که مورد نیاز اکثر برنامه نویسان هستند. به جای اینکه هر برنامه نویس مجبور باشد در این زمینه سرمایه گذاری مجددی صورت دهد سیستمهای GNU به همراه کتابخانه(library)هایی از توابع پیش ساخته برای انجام بسیاری از این وظایف عرضه می شوند. در طول سالها هزاران مورد از چنین توابعی بر روی هم جمع شده اند. در غیر این صورت اگر شما قصد نوشتن برنامهای برای بازی BINGO داشتید مجبور بودید شخصا توابع مخصوص برنامه را بنویسید امااکنون در می یابید که افراد دیگر توابعی برای تولید اعداد تصادفی – نمایش اعداد بر روی صفحه نمایش – دریافت اعداد ورودی از بازیکن و موارد دیگر نوشته اند. #include حالا برنامه را کامپایل و اجرا کنید. اگر همه چیز درست باشد عبارت “hello, world” بر روی ترمینال شما (ابزار خروجی استاندارد ) نمایش داده خواهد شد. در صورتیکه فرامین مربوط به کامپایل و اجرای برنامه را فراموش کردهاید آنها به صورت زیر هستند :
اگر شما هرگونه پیام خطا و یا اخطار را مشاهده می کنید دقت کنید که کدهای شما دقیقا مطابق کدهای این کتاب باشد. هر پیام خطایی که دریافت کنید سطری را که در آن مرتکب اشتباه شدهاید به شما اعلام میکند. در صورتیکه کدها را صحیح تایپ کرده باشید چنین پیامهایی را دریافت نخواهید کرد. 2.2 یک تشریح سطر به سطر حالا به طور سریع کاری را که هر سطر انجام می دهد تشریح می کنیم.در صورتیکه برخی از سطرها برای شما مبهم است نگران نباشید. در آینده نمونههای بسیار زیادی را انجام خواهیم داد. سطر int main()
این دو سطر تعریف تابع ()main را آغاز می کنند. در مورد سطر اول از این دو سطر بعدا توضیحات بیشتری خواهیم داد. {
آکولاد باز نشانه شروع یک بلوک کد است. تمام کدهای بین آکولاد باز و بسته جزیی از تابع ()main هستند. printf("hello, world ");
این سطر در واقع یک فراخوانی تابع (function call) است. تابع از قبل برای شما تعریف شده است. وقتی شما تابع ()printf را فرا می خوانید باید یک نشانوند(Argument)برای آن ذکر کنید تا به آن بگویید چه چیزی را نمایش دهد. return 0;
دستور return به اجرای تابع ()main خاتمه می دهد. هیچ دستور دیگری بعد از این سطر اجرا نخواهد شد. با پایان یافتن تابع ()main برنامه شما خاتمه می یابد. زمانی که یک تابع به پایان می رسد می تواند مقداری را به محلی که از آنجا فراخوانی شده بازگرداند. این کار با قراردادن یک مقدار پس از return حاصل می شود.تابع ()main همواره یک مقدار صحیح (یک عدد مثبت یا منفی بدون اعشار) را باز می گرداند.ما با مقدم ساختن تعریف ()main با int به کامپایلر می فهمانیم که منتظر چنین چیزی باشد. قرار بر این است که درصورت اجرای بدون اشکال تابع ()main مقدار بازگشتی برابر صفر باشد. {
آکولاد بسته نشانه پایان بلوک کدی است که تابع ()main را می سازد. دو سطری که بدنه تابع ()main را می سازند با نام تقریر (statement) شناخته می شوند. به صورت دقیقتر اینها تقریرات ساده (simple statements) هستند (در مقابل تقریرات مرکب (compound statements) که در بخش چهار به آنها می رسیم). (لینک به بخش چهار-- یادداشت ۴) تقریرات در زبان C به منزله جملات برای زبانهای گفتاری هستند. در انتهای هر تقریر ساده یک نقطه-ویرگول (semi-colon) قرار می گیرد. اضافه نمودن خطوط خالی در برنامه اختیاری است.C هیچگونه نیازی به آنها ندارد اما استفاده از آنها باعث خوانایی برنامه می شود. متذکر شدیم که تابع ()main ما مقدار صفر را باز می گرداند. اغلب توابع مقدار بازگشتی خود را به برنامه بازمی گردانند در حالیکه تابع ()main مقدار بازگشتی خود را که نشانه پایان برنامه است برای پوسته ارسال میکند. مقدار بازگشتی برنامه توسط پوسته ذخیره می شود. درصورتیکه مایل به مشاهده آن هستید از دستورات زیر استفاده کنید:
توضیحات یا Commentها راهی برای اضافه نمودن متون توضیحی در برنامه هستند. آنها توسط کامپایلر نادیده گرفته می شوند بنابراین هیچ تاثیری بر روی برنامه شما ندارند. هر چنداین کار حجم برنامه شما را افزایش می دهد اما شما پی خواهید برد که استفاده از Commentها وسیله مفیدی است تا به شما یادآوری کند مشغول انجام چه کاری هستید.در نمونههای این کتاب ما Commentها را برای توضیح آنچه در حال انجام است به کار می بریم.با دو روش میتوانید یک Comment را وارد برنامه خود سازید:عادی ترین روش اینست که در شروع و انتهای متن توضیحی خود به ترتیب از /* و */ استفاده کنید. توضیحات در این روش می توانند از چندین سطر تشکیل شوند. روش دوم استفاده از // درابتدای سطر است که محتویات بعد از خود تا پایان سطر جاری را به متن توضیحی مبدل می سازد. /* The purpose of this program is to * display some text to the screen * and then exit. */ #include پس از کامپایل از لحاظ اجرایی این کدها مشابه کدهای نمونه قبل هستند. خطوط 2 و 3 توضیحات بالا با یک ستاره آغاز می شوند . این کار اگر چه لازم نیست اما این نکته که توضیحات در چهار سطر ادامه دارد را روشن می سازد. 2.1 ساختن توابع شخصی در نمونه قبلی ما تنها بک تابع معرفی کردیم. برای اضافه کردن توابع دیگر به طور کلی شما باید دو کار انجام دهید: ابتدا باید به همان صورت که برای تابع ()main انجام دادیم آنها را تعریف کنیم. کار دیگری که باید انجام دهیم اعلان (declare) توابع است. اعلان یک تابع به منزلهاین است که به gcc بگوییم تا منتظر آن تابع باشد. ما مجبور به اعلان تابع ()main نیستسم زیرا آن یک تابع مخصوص است و gcc می داند که باید منتظر آن باشد. نامی که به تابع میدهیم باید در هر دو جنبه اعلان و تعریف ظاهر شود. #include در نمونه بالا ما تابع ()first_function را نوشتیم که هیچ کاری انجام نمی دهد و نیز تابع ()goodbye که یک پیغام را در صفحه نمایش چاپ میکند. اعلان توابع باید قبل ار فراخوانی آنها صورت بگیرد یعنی در نمونه ما باید توابع قبل از تابع ()main اعلان می شدند. به طور کلی مرسوم است که اعلان توابع بعد از سطرهای شامل عبارت include# و قبل ار آغاز تعریف توابع صورت می گیرد. 2.5 فایلهای چندگانه اجباری برای اینکه برنامهها تنها در یک فایل معین نوشته شوند وجود ندارد. کدهای شما میتوانند در هر تعداد فایل که بخواهید پخش شوند. به عنوان نمونه اگر برنامهای از ۴۰ تابع تشکیل شده باشد شما می توانید هر تابع را در یک فایل جداگانه قرار دهید؛ اگر چه این کار یک افراط در تکه تکه کردن برنامه است. غالبا توابع بر حسب موضوع در گروههایی دسته بندی شده و در فایلهای جداگانه قرار می گیرند. برای نمونه در صورتیکه وظیفه یک برنامه محاسبه قیمت یک پیتزا و نمایش نتیجه است شما می توانید توابع مربوط به محاسبه قیمت را در یک فایل و توابع نمایش نتایج را در فایل دیگری قرار داده و از فایل سوم برای نگهداری تابع ()main استفاده کنید. حال می توانید از فرمان زیر برای کامپایل برنامه استفاده کنید:
یاد آوری می کنیم در صورتیکه تابعی را در prices.c تعریف و قصد فراخوانی آن را در main.c دارید باید آنرا در main.c اعلان کنید. 2.6 فایلهای سرآیند ادامه پیگیری اعلان توابع می تواند موجب شلوغ کاری شود. به همین دلیل فایلهای سرآیند برای جا دادن کدهای C که شما قصد به کارگیری آنها در فایلهای چندگانه را دارید استفاده می شوند. قبل از این شما به طور عملی از یک فایل سرآیند به نام stdio.h استفاده کردید، این فایل سرآیند شامل اعلان توابع بسیار زیادی است. از جمله شامل تابع ()printf و نیز اعلان آن است. شما نیز می توانید یک فایل سرآیند شامل اعلان توابعی که قصد به اشتراک گذاری آنها را دارید ایجاد کنید و سپس با استفاده از include# آن را در اختیار هر فایل C که به اطلاعات آن احتیاج دارد قرار دهید. تنها تفاوت موجود در این است که شما باید به جای علائم < و > نام فایل خود را بین دو "،" یا کوتیشن مارک قرار دهید. یعنی از "my_header.h" به جای 2.7 یک (غیر) برنامه بزرگتر نکات کوچک برنامه نویسی که تا کنون بررسی کردیم برای نوشتن یک برنامه آراسته و تاثیر گذار کافی نیستند. برای حفظ سادگی برنامه ما تنها یک اسکلت کلی از برنامه را می نویسیم تا بدینوسیله ساختار و روش استفاده از فایلهای سرآیند را تشریح کنیم بدون اینکه شما در باتلاق مفاهیم جدید فرو روید. در بخش سوم مقاله یک نسخه کامل از این برنامه را خواهیم نوشت. کدهای زیر می توانند کامپایل و اجرا شود اما عملیاتی برای محاسبه قیمت و یا سوال از کاربر برای وارد کردن اطلاعات انجام نخواهد داد. #include "display.h"
#include "prices.h"
int
main()
{
display_options();
calculate_price();
display_price();
return 0;
}
در مرحله بعد به بررسی display.c میپردازیم. این فایل شامل دو تابع است که هر دو از طریق تابع ()main فراخوانی می شوند و ما اعلان آنها را در یک فایل سرآیند با نام display.h قرار دادهایم. نمونه 2.5 display.c #include نمونه 2.6 display.h /* header file just contains function declarations, an file that wants * to use either of these functions just has to #include this file */ int display_options(void); int display_price(void); و در نهایت prices.c را داریم که شامل توابعی برای دریافت داده از کاربر و محاسبه قیمت مجموع هزینههای پیتزا است. تنها یکی از این توابع از طریق ()main فراخوانی می شود بنابر این اعلان دو تابع دیگر در بالای همین فایل صورت می گیرد. کدهای کامل این توابع را در فصل سوم خواهیم نوشت. int get_size(void);
int get_toppings(void);
int
calculate_price()
{
/* insert code here. Will call get_size() and get_toppings(). */
return 0;
}
int
get_size()
{
/* insert code here */
return 0;
}
int get_toppings()
{
/* insert code here */
return 0;
}
نمونه 2.8 prices.h int calculate_price(void); حالا می توانید gcc را با دستور زیر برای کامپایل فایلهای بالا به کار گیرید:
این برنامه در زمان اجرا پس از نمایش یک پیغام خوش آمدگویی اعلام می کند که قیمت پیتزای شما برابر £0.00 است. 2.8 یک تابع جدید دیگر قبل از ادامه بیایید نگاهی به یکی دیگر از توابع عضو کتابخانه ابزارهای ورودی/خروجی استاندارد بیاندازیم: ()printf. دستور چاپ قالبدار یکی از شکلهای پیشرفته تابع ()printf است. رشتهای که برای ()prinf ارسال می شود می تواند شامل کاراکترهای کنترلی که دارای معانی مخصوصی هستند باشد. رفتن به سطر جدید به طور خودکار توسط ()printf صورت نمی گیرد و برای اینکار باید کاراکترهای را اضافه نمایید. 2.9 خلاصه اصول اولیه مطالبی را که تا کنون از آنها عبور کردیم نباید چندان سخت باشند. اگر قصد کسب تجربه را دارید برنامههایی مشابه که دارای چندین سطر خروجی هستند ایجاد کنید. برنامه خود را به دو تابع تقسیم کرده و آنها را در دو فایل مجزا قرار دهید. همواره در هنگام کامپایل اخطارهای gcc را فعال کنید. اخطارها خبر از مبهم بودن و یا ناکامل بودن کدهای شما می دهند.در این حالت gcc معنای صحیح آنها را حدس می زند و اغلب این کار را به درستی انجام می دهد اما شما نباید به آنها اعتماد کنید. جست و جو برای تصحیح پیغامهای خطا به مهارت شما در استفاده از زبان کمک میکند. اغلب پیغامهای خطا به همراه شماره سطری که مشکل در آن وجود دارد می آیند. اگر شما در آن سطر هیچگونه خطایی مشاهده نمی کنید سطر فوقانی آنرا چک کنید. در صورتیکه یک دستورالعمل ناکامل باشد gcc تا زمانی که به ابتدای دستورالعمل بعدی نرسیده متوجه وجود خطا نخواهد شد.نقطه ویرگولهای خود را فراموش نکنید. |
||||||||||||||||||
|
+ نوشته شده در
سه شنبه یکم آبان 1386ساعت 0:48 توسط نیما محمدی |
|
|
|||
|
+ نوشته شده در
پنجشنبه هشتم شهریور 1386ساعت 1:12 توسط نیما محمدی |
|
|||
|
براي قرار دادن آيکون برنامه در system tray ابتدا يک ماژول تعريف کرده و اطلاعات زير را در آن قرار دهيد : ابتدا تعريف constant هاي مورد نياز :
|
|
+ نوشته شده در
دوشنبه چهاردهم اسفند 1385ساعت 0:39 توسط نیما محمدی |
|
|
+ نوشته شده در
دوشنبه دوم بهمن 1385ساعت 0:20 توسط نیما محمدی |
|
|
||||||||||||||||||||||||
|
+ نوشته شده در
یکشنبه یکم بهمن 1385ساعت 22:6 توسط نیما محمدی |
|
|
||
|
+ نوشته شده در
جمعه بیست و چهارم آذر 1385ساعت 0:11 توسط نیما محمدی |
|
||
|
صفحه نخست پست الکترونیک آرشیو وبلاگ عناوین مطالب وبلاگ |
| درباره وبلاگ |
برنامه نویسی زبانهای ویژوال بیسیک و سی پلاس پلاس و سی شارپ
سورس پروژه رایگان دانشگاهی و کتابهای رایگان برنامه نویسی |
| پیوندهای روزانه |
|
آموزش و اخبار کامپیوتر آرشیو پیوندهای روزانه |
|
RSS
|