Posts Tagged Programming

راهنمای جامع کامپایل برنامه‌های C و C++

اگر به دنبال یک راهنمای سریع، مختصر و مفید هستید پیشنهاد می‌کنم ابتدا نوشتار «راهنمای کوچک برنامه‌نویسی با CODEBLOCK» مطالعه کنید، اما اگر از درد و سر خوشتان می‌آید پس بفرمایید:

برای کامپایل برنامه‌های C++ نیاز به یک کامپایلر می‌باشد. لیست بزرگی از کامپایلر‌های موجود برای C++ و دیگر زبان‌ها را می‌توانید در این مقاله از ویکی‌پدیا ببینید. خیلی از اساتید دانشگاهی برای شروع درس برنامه سازی پیشرفته در همان روزهای اول بدون توضیح در مورد کامپایلرها و تنوع آنها به دانشجویان کامپایلر‌های Turbo C++ یا Borland C++ و در نهایت Visual Studio را پیشنهاد می‌کنند.

کمی دست نگه دارید تا بیشتر در مورد کامپایلر‌ها آشنا شویم، سپس انتخاب با خودتان. دوباره به لیست همگردان‌های C++ در ویکی‌پدیا نگاهی بیاندازید.

قبل از هر چیز در مورد دو واژه‌ی مهم توضیح بسیار مختصری بدهم:

  • Compiler: كامپایلر برنامه یا مجموعه‌ای از برنامه‌های كامپیوتری است كه متنی از زبان برنامه نویسی سطح بالا (زبان مبدا) را به زبانی سطح پایین (زبان مقصد)، مثل اسمبلی یا زبان سطح ماشین، تبدیل می‌كند. خروجی این برنامه ممكن است برای پردازش شدن توسط برنامه دیگری مثل پیونددهنده مناسب باشد یا فایل متنی باشد كه انسان نیز بتواند آنرا بخواند.
  • IDE: مخفف عبارت انگلیسی Integrated Development Environment است و عبارت است از محیطی عمدتاً گرافیکی که تمام یا شماری از ابزارهای لازم برای توسعهٔ نرم‌افزار (بخش‌هایی یا تمام زنجیره ابزار توسعه) را خود دارد. در IDE دسترسی به ابزارها و اعمال آن‌ها در پروژهٔ جاری تسهیل شده‌است.

۱-تفاوت بین IDE و Compiler در چیست؟

کامپایلرها بر دو نوع اند. کامپایلر‌های خط فرمان و کامپایلر‌های همراه با IDE. کامپایلر‌های خط فرمان هیچ گونه محیط کاربری (GUI) ندارند و تمامی مراحل کامپایل از طریق خط فرمان سیستم عامل انجام می‌شود. اما در کامپایلرهای همراه با IDE اکثرا کار کامپایل و Link و Builld را ساده کرده‌اند و تمامی مراحل را به طور خودکار برای کاربر انجام می‌دهند. برای مثال کاربر کافیست پس از نوشتن برنامه در ویرایشگر کامپایلر، کلید F6 را فشار دهد.

البته یک IDE (محیط توسعه‌ی مجتمع) در اصل یک نرم‌افزار گرافیکی می‌باشد که با ابزارهای برنامه نویسی از جمله پیوند دهنده‌ها (Linker)، همگردان‌ها و نرم‌افزارهای کنترل نسخه (Version Control Software) و … ارتباط برقرار می‌کند و یک محیط بسیار راحت را برای برنامه‌نویسان ایجاد می‌کند.

یک محیط توسعه‌ی مجتمع معمولا امکانات زیر را در اختیار برنامه‌نویسان قرار می‌دهد:

اما به نظر من استفاده از IDE برای تازه‌واردان برای توسعه‌ی نرم‌افزار و برنامه‌نویسی بسیار اشتباه است. بهتر است ابتدا سعی کنید با مفاهیم کامپایلر آشنایی پیدا کنید. خطاها و پارامترهای آن را به خوبی بشناسید و چند هفته (چند ماهی) از IDE دوری کنید و سعی کنید تمام مراحل کامپایل یک برنامه را به روش های گوناگون به خوبی یاد بگیرید. برای مثال ابتدا سعی کنید از برنامتان یک فایل Object درست کنید سپس با Linker آن را با دیگر کتابخانه‌های سیستمی پیوند دهید و فایل اجرایی را تولید کنید.

سعی کنید با ساختار فایل‌های Makefile و هنچنین کتابخانه‌های دینامیک و استاتیک آشنا شوید و همه‌ی این مراحل را بدون استفاده از IDE با یک ویرایشگر ساده و خط فرمان اجرا کنید. پس از یادگیری این مفاهیم به سراغ SCM و همچنین VCS یا همان سیستم کنترل نسخه (Version Control System) بروید. پس از اینکه با تمامی این مفاهیم آشنا شدید می‌توانید به سراغ یک IDE مناسب بروید و طراحی نرم‌افزار را با آن تجربه کنید.

در ضمن برای مقایسه و بررسی لیستی از IDEهای مختلف می‌توانید از این پیوند استفاده کنید.

۲- برنامه نویسی C++ با مجموعه کامپایلر گنو

من بدون هیچ گونه تعصب و غرض ورزی شخصی انتخاب کامپایلر مناسب را به عده‌ی خودتان می‌گذارم اما بنابر تجربه قصد دارم از این قسمت به بعد به معرفی کامپایلر مجموعه‌ی GNU (بخوانید گنو) بپردازم.

GCC از ابتدا مخفف Gnu C Compiler بود ولی از زمانی که توانست زبانهای دیگری غیر از C از قبیل C++,Ada,Java,Objective C و Fortran را کامپایل کند به Gnu Compiler Collection تغییر نام داد. پدید آورنده اصلی GCC ریچارد استالمن است کسی که بنیانگذار پروژه Gnu محسوب می شود. نخستین نسخه GCC در سال 1987 انتشار یافت که یک پیشرفت مهم محسوب می شد زیرا محصول جدید اولین کامپایلر بهینه سازی شده قابل حمل ANSI C به عنوان یک نرم افزار آزاد محسوب می شد. در سال 1992 نسخه 2.0 کامپایلر GCC عرضه شد. نسخه جدید قابلیت کامپایل کدهای ++C را نیز داشت. در سال 1997 یک انشعاب آزمایشی در GCC به نام EGCC به منظور بهینه سازی کامپیایلر و پشتیبانی کامل تر از ++C ایجاد شد. در ادامه EGCC به عنوان نسل بعدی کامپایلر GCC پذیرفته شد و تکامل آن باعث انتشار نسخه سوم GCC در سال 2004 گردید. چهارمین نسخه از کامپایلر GCC در سال 2005 عرضه شد.

۲.۱ -کامپایل برنامه‌های C و C++ در سیستم‌عامل Linux

در صورتی که از سیستم‌عامل لینوکس مبتنی بر توزیع Debian استفاده می‌کنید وارد خط فرمان سیستم عاملتان شوید.

برای اطمینان از نصب کامپایلر GNU C++ فرمان زیر را در خط فرمان وارد کنید:

$ g++ –version

g++ (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)

Copyright (C) 2007 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

پیغام بالا به منزله نصب بودن g++ بر روی سیستم‌عامل می‌باشد. در صورتی که g++ بر روی Linux شما نصب نمی‌باشد فرمان زیر را اجرا کنید:

$ sudo apt-get install g++ build-essential

حال توسط یک ویرایشگر متنی در Linux برنامه‌ی زیر را بنویسید. بهتر است برای نوشتن برنامه‌ها استفاده از ویرایشگر Vim را یاد بگیرید. برای اطلاعات بیشتر به این مقاله مراجعه کنید.

۱. کامپایل برنامه‌های C

#include <stdio.h>

int main(){

printf(«Hello World!\n»);

return 0;

}

برنامه‌ی بالا را با نام hello.c ذخیره کرده و با فرمان زیر کامپایل کنید:

$ gcc hello.c -o hello

اگر هیچ خطایی از فرمان بالا صادر نشد و هیچ پیغامی صادر نشد فرمان زیر را اجرا کنید تا برنامه ی hello اجرا شود:

$ ./hello

پیغام Hello World! در پایانه چاپ می‌شود.

۲. همگردانی برنامه‌های ++C

برنامه‌ی زیر نوشته و با نام hello.cpp ذخیره کنید:

#include <iostream>

int main(){

std::cout << «Hello World!» << std::endl;

return 0;

}

برنامه‌ی بالا را با فرمان زیر کامپایل کنید:

$ g++ hello.cpp -o hellocpp

حال با فرمان زیر می‌توانید برنامه‌ی کامپایل شده را اجرا کنید:

$ ./hellocpp

توضیحات:

۱. کامپایلر زبان C، برنامه‌ی gcc می‌باشد.

2. کامپایلر زبان C++ برنامه‌ی g++ می‌باشد.

۳. واضح است که بیان hello.c در فرمان gcc یا g++ به معنای کامپایل hello.c می‌باشد. در صورتی که همراه با این پرونده نیاز به کامپایل پرونده‌های دیگری از جمله کلاس‌ها و توابع دیگر می‌باشید. نام آنها را به صورت پارامتر لیست کنید.

فرض کنید برنامه‌ی شما از فایل‌های main.cpp math.h math.cpp تشکلیل شده باشد برای کامپایل این برنامه باید از خط فرمان زیر استفاده کنید:

$ g++ main.cpp math.cpp -o main

۴. در فرمان‌ بالا کامپایلر ابتدا برنامه‌ی شما را به پرونده‌ی Object تبدیل می‌کند و سپس آن را توسط پیوند دهنده (Linker) به پرونده‌ی اجرایی تبدیل می‌کند. که در حقیقت کامپایلر مرحله‌ی میانی را به صورت خودکار برای شما انجام می‌دهد. برای تبدیل یک برنامه به پرونده‌ی Object فرمان زیر را اجرا کنید:

$ g++ -c main.cpp

۶- Wall: این option به معنی all warnings است و تمامی اخطار ها را به شما نشان می دهد. توجه کنیدکه اخطار با خطا فرق داره! مثلا اگر شما به جای استفاده از == از = استفاده کرده باشید یا متغیری از نوع لوکال رو مقدار دهی اولیه(initiaze)نکرده باشید یا موارد مشابه اون رو به شما گزارش می دهد. توصیه می شود که همیشه از این option استفاده کنید. چون واقعا سرعت شما را در debug کردن افزایش می دهد.

$ g++ -Wall main.cpp

۷- با فرمان زیر می‌توانید برنامتان را به کد Assembly تبدیل کنید.

$ g++ -S main.cpp

۲.۲- کامپایل برنامه‌های C و C++ در Microsoft Windows

مجموعه‌ی کامپایلر‌های gnu در ابتدا برای سیستم‌عامل GNU/Linux نوشته شد اما پس مدتی پروژه‌ی Cygwin شروع به port کردن کامپایلر gnu به سیستم‌عامل Windows نمود. هدف پروژه‌ی Cygwin از همان ابتدا پیاده‌سازی تمامی System Callهای Unix در Windows، بر اساس استاندارد Posix بود و تا به حال نرم‌افزارهای بسیاری در Linux با استفاده از Cygwin به نسخه‌ی Windowsی تبدیل شده اند. برای مثال نرم‌افزارهای OpenOffice.org و Mozilla Firefox و sshd و TeX و Apache و … با استفاده از Cygwin از نسخه‌ی linuxی به نسخه‌ی windowsی تبدیل شده اند.

MinGW از نسخه‌ی1.3.3 نرم‌افزار Cygwing جدا (fork) شد و به دلیل اینکه MinGW از Win32-API استفاده می‌کند، نمی‌تواند تمام استاندارد‌های Posix را پیاده‌سازی کند. وقتی MinGW را با MySYS ترکیب کنیم یک محیط بسیار راحت شبیه محیط های Unix برای کار با خط فرمان ایجاد می‌شود و به دلیل داشتن این ویژگی کار با MinGW راحتتر از Cygwign می‌باشد.

دو راه برای نصب MinGW وجود دارد.

۱. می‌توانید آن را از پایگاه رسمی‌اش دریافت کرده و نصب کنید.

۲. MinGW به همراه بسته‌ی نرم‌افزاری CodeBlock نصب می‌شود.CodeBlock یک IDE قدزتمند برای C++ می‌باشد و به دلیل آنکه در آینده به این IDE نیاز پیدا می‌کنیم بهتر است از روش دوم استفاده کنیم.

نسخه‌ی CodeBlcok به همراه MinGW را از اینجا دریافت و نصب کرده و سپس MySYS را از این پیوند دریافت و نصب کنید. پس از اینکه نصب MySYS تمام می‌شود یک پنجره‌ی cmd باز می‌شود چندین سوال می‌پرسد.

ابتدا از شما می‌پرسد که آیا به ادامه‌ی نصب نرم‌افزار راضی هستید؟ کلید y را فشار داده و سپس Enter را بزنید.

سوال بعد می‌پرسد که آیا شما MinGW را نصب کرده‌اید؟ کلید y را فشار داده و سپس Enter را بزنید.

محل نصب بسته‌ی نرم‌افزاری MinGW را می‌پرسد. جواب این سوال آدرسی است به صورت زیر:

C:\Program Files\CodeBlocks\MinGW

پس از طی مراحل بالا یک Shortcut روی Desktop شما به نام MYSYS ایجاد می‌شود. با اجرای MYSYS شما وارد یک محیط خط فرمان شبیه خط فرمان‌ Linux می‌شوید و می‌توانید همانند قسمت ۲.۱ همین راهنما برنامه‌های C و C++ خود را کامپایل و اجرا کنید.

حال پس از مدتی که با فرمان‌ها و هشدارهای کامپایلرهای GCC و g++ آشنا شدید می‌توانید یک IDE مناسب به سلیقتان نصب کرده و برنامه‌هایتان را در آن نوشته و کامپایل کنید. هم اکنون محیط توسعه مجتمع CodeBlock روس سیستم شما نصب می‌باشد. می‌توانید با اجرای این IDE و کار با آن از برنامه‌نویسی لذت ببرید.

در برای مقایسه‌ی IDEهای موجود در دنیای برنامه‌نویسی می‌توانید به این آدرس در ویکی‌پدیا مراجعه کنید.

در آخر عرض کنم که یکی از اهداف من در این مقاله آشنا کردن دانشجویان با ویکی‌پدیا بود (دانشنامه‌ای آزاد که هر کسی می‌تواند آن را ویرایش کند).

سعی کنید از ویکی‌پدیا که یک دانشنامه‌ی آزاد می‌باشد استفاده و حتی به گسترش آن نیز کمک کنید.

Advertisements

Comments (16)

رابط برنامه نویسی Google Reader به طور غیر رسمی منتشر شد

من همیشه از این گلایه می‌کردم که چرا Google رابط برنامه نویسی Google Readerش را منتشر نمی کنه (منظورم همون API هست). یه مدت بود که با این
Google Reader سر جنگ داشتم. سعی می‌کردم تا اونجایی که میتونم ازش دوری کنم و معتادش نشم. یه مدت از Bloglines استفاده می‌کردم و به دلیل سیاست بسیار خوبی که در زمینه‌ی API داشت از استفاده‌ی اون لذت می‌بردم.
به راحتی میتونستم با استفاده از نرم‌افزارهای third-party موجود به خوراک‌هام به صورت Offline دسترسی داشته باشم. اما از وقتی که به لینوک مهاجرت کردم با یک مشکل اساسی مواجه شدم و آن نبود نرم‌افزار مناسبی برای برای چک کردن خوراک‌هام بود. راستی یادم رفت بگم، تا زمانی که توی Windows بودم از GreateNews استفاده می‌کردم که امکانات بسیار خوبی برای Synchronize کردن خوراک‌ها با Bloglines داشت.

خلاصه از وقتی اومدم به دنیای زیبای GNU/Linux مجبور شدم از همون Google Reader قدرتمندی با امکانات قدرمتند اون در به اشتراک گذاری خوراک‌ها استفاده کنم. البته یک مدتی هم به سرم زده بود بشینم یک خوراک‌خوان اختصاصی برای Bloglines بنویسم.

یک مدت گذشت و ما هم با همین وضع کنار آمدیم تا اینکه چند روز پیش این خبر به گوشم خورد:

Niall Kennedy اخیرا جزيیات رابط برنامه‌نویسی Google Reader را به صورت غیر رسمی منتشر کرد. البته این API رسمی نمی‌باشد و توسط Google پشتیبانی نمی‌شود. نکته‌ی قابل توجه اینجاست که Kennedy اعلام کرده که او تصدیق‌نامه‌ای از Google به خاطر گزارش این API به صورت دقیق دریافت کرده.
همچنین Kennedy اعلام کرده که Jason Shellan، مدیر پروژه‌ی تیم Google Reader گفته که به زودی Google رابط برنامه‌نویسی Google Reader را به طور رسمی اعلام خواهد کرد.
واقعا جای تاسف هست که Google باید بعد از اینکه APIش توسط دیگران فاش بشه قبلا اون را به صورت رسمی منتشر نکرده. شاید این واقعه برای من به یک کابوس تبدیل شده بود. همیشه از اینکه google reader رابط برنامه‌نویسیش را اعلام نمی‌کرد در عذاب بودم.

از این پس باید شاهد تحول بسیار بزرگی در زمینه‌ی خوراک خوان های تحت و روی میزی در سال جدید باشیم. مطمئنا third-party های قدرتمندی در این زمینه به فعالیت می‌پردازند. از مزایای استفاده ازاین API در ساخت Feed Aggregatorها این هست که:

  1. گوگل و تیم مهندسی آن و همچنین serverهای قدرتمند آن دارای توانایی بالایی در عملیات واکشی feed ها (parse) و همچنین دریافت فرم‌های متفاوت feed از جمله XML و RSS 1.0 , RSS 2.0 , Atom 0.3 , Atom 10 و … می‌باشد. عملیاتی چون validation خوراک ها نیز از معضلات موجود در سر راه برنامه نویسان می‌باشد که همگی این فرایند ها در google reader انجام می شود. و برنامه نویسان نیازی به تمرکز بر روی واکشی خوراک ها با فرمت های مختلف را ندارند زیرا این API تنها یک خروجی دارد.
  2. کاهش هزینه‌ها در پهنای باند مصرفی: در استفاده از این API دیگر نیازی به بررسی کردن آدرس خوراک های مختلف را نداریم. علی الخصوص اینکه با هر بار بررسی آدرس خوراک‌ها تنها تعداد معدودی از خوراک ها به روز شده‌اند و در نتیجه مصرف پهنای باند کاربر به شدت پایین خواهد آمد.
  3. استفاده از امکانات Web 2.0: همان طور که می‌دانید یکی از دلایل محبوبیت خوراک خوان Google Reader، امکانات اشتراکی آن می‌باشد. که باز هم می‌توان از طریق این API می‌توان به اقلام اشتراکی نیز دسترسی داشت.
  4. بازدهی بیشتر در کامپیوتر‌های قدیمی: به علت استفاده‌ی شدید از JavaScript و تکنولوژی Ajax در این خوراک خوان. باعث سنگین شدن بیش از حد آن شده به طوری که عملا با استفاده‌ی منابع زیادی از سیستم باعث کند شدن فعالیت سیستم عامل می‌شود. اما در صورت استفاده از نرم‌افزارهای third-pary در کامپیوتر های قدیمی می‌توان از استفاده‌ی بیش از حد منابع سیستمی جلوگیری کرد.
  5. طراحی خوراک‌خوان برای تلفن همراه: از این بعد می‌توان شاهد سیل عظیمی از نرم‌افزارهای خوراک خوان برای تلفن‌های همراه بود.

اطلاعات بیشتر:

Google Reader API
The 2008 Google Summer of Code: 21 Projects I’m Excited About
Google Reader Integration with Liferea
Google Reader Sync Support: a progress report
GoogleReaderAPI – pyrfeed – Google Code
Authenticating the Google Reader API

نوشتن دیدگاه