PDA

View Full Version : کامپایلر مناسب برای C++ استاندارد



MinusOne
شنبه 10 فروردین 1392, 14:18 عصر
سلام ؛ میخوام ++C شروع کنم ! دنبال یه کامپایلر/IDE مناسب میگردم که نه توابعی رو از خودش اضافه کرده باشه نه برای اجرا نیازی به RunTime یا فریمورک خاصی داشته باشه اصطلاحا می خوام استاندارد کد بزنم. ممنون میشم راهنماییم کنید. (استفاده از Visual Studio اصلا برام خوشایند نیست چون به هیچوجه دوست ندارم کدم وابسته به چیزی باشه)

smemamian
شنبه 10 فروردین 1392, 14:22 عصر
با این مشخصات به نظرم Qtیا eclipse را بررسی کنید .

حامد مصافی
شنبه 10 فروردین 1392, 14:38 عصر
کامپایلر g++ در حال حاضر به‌روز ترین کامپایلر سی‌پلاس‌پلاس است.
نمونه‌ای از این کامپایلر برای ویندوز به نام mingw (minimal gnu for windows) وجود دارد.
IDE های کراس‌پلتفرم زیادی هم که با این کامپایلر هماهنگی داشته باشد موجودند.


Eclipse: بسیار کارآمد و همه فن حریف
NetBeans: در اصل برای جاوا ساخته شده بود اما برای سی‌پلاس‌پلاس هم بد نیست.
Code::Blocks: یک محیط خوشدست و بدون پیچیدگی (توصیه شده برای تازه‌ واردها)

smemamian
شنبه 10 فروردین 1392, 15:09 عصر
آقای مصافی Qt یا Eclipse به نظرتون ؟

حامد مصافی
شنبه 10 فروردین 1392, 15:13 عصر
Qt یک فریم‌ورک است نه یک محیط‌برنامه‌‌نویسی. اگر منظورتان QtCreator باشد، باید عرض کنم برای سی‌پلاس‌پلاس بد نیست. اما برای کیوت بهینه شده است و برای سی‌پلاس‌پلاس خالص چندان دلچسب نیست. در مورد eclipse هم نظرمو عرض کردم.

armintirand
شنبه 10 فروردین 1392, 16:31 عصر
در ضمن با توجه به اینکه ایشون نمیخان وابسته به چیزی باشن کیوت براشون مناسب نیست مگر اینکه بصورت استاتیک کار بکنن .

MinusOne
شنبه 10 فروردین 1392, 16:39 عصر
کامپایلر g++ در حال حاضر به‌روز ترین کامپایلر سی‌پلاس‌پلاس است.
نمونه‌ای از این کامپایلر برای ویندوز به نام mingw (minimal gnu for windows) وجود دارد.
IDE های کراس‌پلتفرم زیادی هم که با این کامپایلر هماهنگی داشته باشد موجودند.



Eclipse: بسیار کارآمد و همه فن حریف
NetBeans: در اصل برای جاوا ساخته شده بود اما برای سی‌پلاس‌پلاس هم بد نیست.
Code::Blocks: یک محیط خوشدست و بدون پیچیدگی (توصیه شده برای تازه‌ واردها)


با تشکر ؛ من قبل از ایجاد این تاپیک سعی کردم که eclipse رو با MinGW ست کنم اما موفق نشدم چون منبع معتبری پیدا نکردم اگر آموزشی مقاله ای چیزی درمورد تنظیم این دوتا دارین لطفا معرفی کنید ، استفاده از Eclipse for C/C++‎ Developers هم کمکم نکرد ، فکر می کنم مشکل از کامپایلرم (MinGW) باشه نمی دونم باز اگر منبع آموزشی یا نسخه ای که خودش MinGW رو داشته باشه میشناسین ممنون میشم بهم بدین. (Code Blocks بدون مشکل ایجاد شد ولی خوب Eclipse یه چیز دیگست)

MinusOne
شنبه 10 فروردین 1392, 16:40 عصر
در ضمن با توجه به اینکه ایشون نمیخان وابسته به چیزی باشن کیوت براشون مناسب نیست مگر اینکه بصورت استاتیک کار بکنن .
بله همونطور که عرض کردم قصدم استفاده از فریمورک خاصی نیست.

#target
شنبه 10 فروردین 1392, 23:55 عصر
مگه ویژوال استودیو فایل رو وابسته به چیزی میکنه ؟ درسته دات نت هم داره میتونی استفاده کنی اما Win32 مستقله . و کد استاندارد هم بنویسی قاعدتا کامپایل میشه

اما همون Code Block با کامپیایلر پیش فرض خودش سایز کمی داره خوبه

sr2m72
یک شنبه 11 فروردین 1392, 00:55 صبح
سلام
به نظر من از Code Block استفاده کنید خیلی خوبه
Dev-C++ هم گزینه ی خوبیه

موفق باشید!

بهروز عباسی
یک شنبه 11 فروردین 1392, 01:54 صبح
(استفاده از Visual Studio اصلا برام خوشایند نیست چون به هیچوجه دوست ندارم کدم وابسته به چیزی باشه)
:لبخندساده:


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

یکم کلی نمیگی ؟
این کار حضرت فیله ،توی ویندوز هم نمیشه:گیج:

اگه قرار باشه یک OS بسازی عملاً همچین شرایطی رو داری ،هیچ کتابخونه و ... در کار نیست و خودت باید با Inline Assembly توابع ساده مثل printf و... رو طراحی کنی (در واقع باید کتابخونه هاشو خودت بسازی)

اما وقتی قراره برنامه شما توی MSWin اجرا بشه نمیتونید این کارو بکنید چون برنامه شما در User-Mode اجرا میشه و دسترسی مستقیم به HW رو نداری و نمیتونی با وقفه ها هم کار کنی (مثلاً برای نمایش رسته در خروجی ، اگه برنامه کنسول باشه گرافیک آنچنانی که....) و مجبوری از Windows API استفاده کنی ، که خودش یعنی وابستگی !:متعجب:!

اما اگه فقط میخوای برنامت روی همه سیستم ها اجرا بشه ،مثلاً میتونی از Delphi استفاده کنی که نیازی به فایل های Runtime نداره و یا خودت بجای استفاده از کتابخونه های مخصوص یک زبان ، با استفاده ازWindows API یه کتابخونه بنویسی و به برنامت لینکش کنی اینطوری فقط یه فایل اجرایی داری و تمام.:متفکر:

masudafsar
یک شنبه 11 فروردین 1392, 02:29 صبح
MinusOne عزیز:
منظور شما از اینکه نمی خوای برنامه ات به چیزی وابسته نباشه دقیقا چیه؟ منظور این که به پیش نیازی احتیاج نداشته باشه یا اینکه مستقل از سیستم عامل اجرا بشه؟

در هر صورت اگر می خواهید حرفه ای کار کنید از کامپایلر Cygwin استفاده کنید. دانلود این کامپایلر از نصب و کانفیگش سخت تره ولی ارزشش رو داره. چون محیط لینوکس رو برات شبیه سازی میکنه و خروجی exe بهت میده. بهترین IDE های حاضر برای این کامپایلر Eclipse و NetBeans است که هر دو بصورت رایگان در دسترس اند.

masudafsar
یک شنبه 11 فروردین 1392, 02:31 صبح
در ضمن اگر می خواهی برنامه مستقل از سکو (منظور مستقل از سیستم عامل) باشه ، پیشنهاد من اینه که قید خانواده C رو بزنی و بری سراغ Java یا Python.

بهروز عباسی
یک شنبه 11 فروردین 1392, 02:35 صبح
بری سراغ Java یا Python.
اینا که بدتر شد (برنامه هاش آویزون ماشن مجازی میشه)
خودش گفته

نه برای اجرا نیازی به RunTime یا فریمورک خاصی داشته

hadi0x7c7
یک شنبه 11 فروردین 1392, 02:44 صبح
با سلام.

شما اول میری این جا و GCC جدید رو دان میکنی
http://www.equation.com/servlet/equation.cmd?fa=fortran
( 4.7.2) و ادرس نصبشو میزاری C:\MinGW
بعد از اون هم Eclipse CDT رو دان میکنی و اجرا و بسم الله !

BORHAN TEC
یک شنبه 11 فروردین 1392, 02:49 صبح
سلام
اگر قصد شما این است که C++ استاندارد یاد بگیرید می توانید از محصولاتی مثل Visual C++ و یا C++ Builder استفاده کنید که از استانداردهای C++ پیروی می کنند. استفاده از C++ Builder برای این منظور به نظر من بهتر است، چون کار با آن بی نهایت ساده است.
اگر بعداً حرفه ای شدید و خواستید که برنامه های Cross Platform (یعنی برنامه هایی که می توانید بدون تغییر و یا با تغییرات کمی آنرا در سیستم عامل های مختلف مثل ویندوز و لینوکس و ... اجرا کنید) بسازید به نظر من بهترین گزینه ممکن تا به حال C++/Qt است.
موفق باشید...

masudafsar
یک شنبه 11 فروردین 1392, 02:51 صبح
اینا که بدتر شد (برنامه هاش آویزون ماشن مجازی میشه)
خودش گفته

ببخشید من گفتم مستقل از سکو نه مستقل از فریم ورک!

بهروز عباسی
یک شنبه 11 فروردین 1392, 02:59 صبح
ببخشید من گفتم مستقل از سکو نه مستقل از فریم ورک!
ببخشید :لبخندساده:
حق با شماست

BORHAN TEC
یک شنبه 11 فروردین 1392, 03:05 صبح
نه برای اجرا نیازی به RunTime یا فریمورک خاصی داشته
دوست عزیز، هیچ برنامه درست و حسابی ای وجود نداره که به فریم ورک خاصی نیاز نداشته باشه و شما باید کلاً دیدتون رو تغییر بدین(این کار شما مثل اینه که بخواهید با یک قاشق غذا خوری یک قنات بزرگ حفر کنید!). برخی از برنامه ها برای اجرا به یک مفسر و یا VM نیاز دارند که برای بسیاری از برنامه ها یک مقدار دست و پا گیر هستند و باید این مفسر و یا VM روی سیستم نصب بشه(مثل برنامه های دات نتی. البته برخی از محصولات مانند جاوا بهتر عمل کرده اند و با به کار گیری یک تکنیک میشه کاری کرد که بدون این که ماشین مجازی جاوا روی سیستم نصب باشه و از روی حتی یک CD بشه برنامه های جاوایی رو بدون مشکل اجرا کرد(قابل توجه دوست خوبم بهروز جان!). البته برای برنامه های دات نتی هم میشه این کار رو کرد ولی در برخی از مواقع مشکلاتی پیش میاد که توضیح در مورد آنها خارج از حوصله این بحث است.). برخی از برنامه ها هم هستند که برای اجرا فقط به امکانات خود سیستم عامل وابسته هستند و نیازی به مفسر و VM ندارند(مثل برنامه هایی که با Delphi و یا C++‎‎‎/Qt ساخته می شوند که اصطلاحاً به این قبیل برنامه ها برنامه های بومی و یا Native گفته می شود که سرعت اجرایی بسیار بالاتری هم دارند).

masudafsar
یک شنبه 11 فروردین 1392, 03:21 صبح
دوست عزیزمون Object Pascal درست میگن.

اگر شما تصمیم بگیرید که برنامه ای که می نویسید به هیچ فریمورکی وابسته نباشه و کاملا بومی باشه، بعد ها حتی با تغییر نسخه سیستم عامل هم ممکنه دچار مشکل بشی. مثلا برنامه های کاملا بومی برای ویستا و سون در XP به سختی و با مشکلاتی ( هر چند کوچک ) اجرا می شوند.

درضمن اگر شما بخواهید قید دات نت را بزنید، باید قید پایگاه داده SQL server رو هم بزنید که برای برنامه های تجاری تحت ویندوز بهترین گزینه همین ها هستند.

BORHAN TEC
یک شنبه 11 فروردین 1392, 15:29 عصر
درضمن اگر شما بخواهید قید دات نت را بزنید، باید قید پایگاه داده SQL server رو هم بزنید که برای برنامه های تجاری تحت ویندوز بهترین گزینه همین ها هستند.
این حرفتون رو اصلاً قبول ندارم و این فقط نظر شخصی شما تا حدود بسیار زیادی هم اشتباه است. یافتن یک فریم ورک و پایگاه داده مناسب در یک پروژه وابسته به عوامل بسیار زیادی است که این نظرات کلی همیشه بدترین نتیجه رو به بار میاره.

MinusOne
یک شنبه 11 فروردین 1392, 22:46 عصر
مگه ویژوال استودیو فایل رو وابسته به چیزی میکنه ؟ درسته دات نت هم داره میتونی استفاده کنی اما Win32 مستقله . و کد استاندارد هم بنویسی قاعدتا کامپایل میشه

اما همون Code Block با کامپیایلر پیش فرض خودش سایز کمی داره خوبه
بحثم این نیست که ویژوال استادیو کد استاندارد رو کامپایل نمی کنه ، دوست ندارم از همین ابتدای شروعم خواسته یا نخواسته از توابعی استفاده کنم که فقط مختص ویندوز ( یا هر سیستم عامل دیگه ای باشه) .

MinusOne
یک شنبه 11 فروردین 1392, 22:55 عصر
یکم کلی نمیگی ؟...
قبل از هر چیزی باید عرض کنم که قصدم اصلا نوشتن برنامه تجاری یا برنامه ای با GUI کامل نیست . در مورد توابعی همچون printf هم فکر نکنم که تابعی خارجی باشه من نمی خوام توابعی که تو کتابخونه های اصلی زبان هستن رو بازنویسی کنم (منظورم از ++C استاندارد خود زبان و کتابخانه های رسمیش هست). قصدم تجربه ی ++Cـه و به نظرم (کاملا نظر شخصیه) اگر بخوام برای ویندوز برنامه ای بنویسم #C بهترین گزینست چون هم رفرنس کاملی داره و هم فریمورکش بسیار گستردست و نیاز های منو کاملا رفع می کنه و فکر هم نمی کنم در همین سطح (ایحاد برنامه ویندوزی با GUI خوب) محدودیتی نسبت به ++C داشته باشه.

MinusOne
یک شنبه 11 فروردین 1392, 23:01 عصر
MinusOne عزیز:
منظور شما از اینکه نمی خوای برنامه ات به چیزی وابسته نباشه دقیقا چیه؟...
تعریف از پیشنیاز چیه ؟ من نمی خوام که از توابعی که مخصوص ویندوز یا لینوکس یا هر چیزه دیگه ای هستن یا توابعی که برای اجرا نیاز به Runtime یا چیز دیگه دارند استفاده کنم.

MinusOne
دوشنبه 12 فروردین 1392, 00:42 صبح
در ضمن اگر می خواهی برنامه مستقل از سکو (منظور مستقل از سیستم عامل) باشه ، پیشنهاد من اینه که قید خانواده C رو بزنی و بری سراغ Java یا Python.
میشه بیشتر توضیح بدین ؟ مگه اکثر سیستم عامل ها با ++C ایجاد نشدن ؟

MinusOne
دوشنبه 12 فروردین 1392, 00:49 صبح
دوست عزیز، هیچ برنامه درست و حسابی ای وجود نداره که به فریم ورک خاصی نیاز نداشته باشه و شما باید کلاً دیدتون رو تغییر بدین(این کار شما مثل اینه که بخواهید با یک قاشق غذا خوری یک قنات بزرگ حفر کنید!). برخی از برنامه ها برای اجرا به یک مفسر و یا VM نیاز دارند که برای بسیاری از برنامه ها یک مقدار دست و پا گیر هستند و باید این مفسر و یا VM روی سیستم نصب بشه(مثل برنامه های دات نتی. البته برخی از محصولات مانند جاوا بهتر عمل کرده اند و با به کار گیری یک تکنیک میشه کاری کرد که بدون این که ماشین مجازی جاوا روی سیستم نصب باشه و از روی حتی یک CD بشه برنامه های جاوایی رو بدون مشکل اجرا کرد(قابل توجه دوست خوبم بهروز جان!). البته برای برنامه های دات نتی هم میشه این کار رو کرد ولی در برخی از مواقع مشکلاتی پیش میاد که توضیح در مورد آنها خارج از حوصله این بحث است.). برخی از برنامه ها هم هستند که برای اجرا فقط به امکانات خود سیستم عامل وابسته هستند و نیازی به مفسر و VM ندارند(مثل برنامه هایی که با Delphi و یا C++‎‎‎/Qt ساخته می شوند که اصطلاحاً به این قبیل برنامه ها برنامه های بومی و یا Native گفته می شود که سرعت اجرایی بسیار بالاتری هم دارند).
وقتی محدودیت زمانی نیست ، کندن قنات هم لذتی داره چه بسا با قاشق! قصدم ایجاد نرم افزار های شخصی هست و دوست ندارم وقتی کل کارم 100 کیلوبایت نمیشه چندین مگ فضای هاردم رو به .Net یا JRE اختصاص بدم و همین هدف (و چندتا چیزه دیگه) منو واداشت که از ++C استفاده کنم.

MinusOne
دوشنبه 12 فروردین 1392, 00:51 صبح
دوست عزیزمون Object Pascal درست میگن.

اگر شما تصمیم بگیرید که برنامه ای که می نویسید به هیچ فریمورکی وابسته نباشه و کاملا بومی باشه، بعد ها حتی با تغییر نسخه سیستم عامل هم ممکنه دچار مشکل بشی. مثلا برنامه های کاملا بومی برای ویستا و سون در XP به سختی و با مشکلاتی ( هر چند کوچک ) اجرا می شوند.

درضمن اگر شما بخواهید قید دات نت را بزنید، باید قید پایگاه داده SQL server رو هم بزنید که برای برنامه های تجاری تحت ویندوز بهترین گزینه همین ها هستند.
نرم افزارم قرار نیست GUI آنچنانی داشته باشه و حتی قرار نیست تجاری یا مختص ویندوز باشه و در مورد SQL Server ، من زمانی که از #C هم استفاده می کردم ، دیتابیس مورد استفادم SQLite بود.

masudafsar
دوشنبه 12 فروردین 1392, 03:02 صبح
میشه بیشتر توضیح بدین ؟ مگه اکثر سیستم عامل ها با ++C ایجاد نشدن ؟

همین طوره که شما میگید، ولی مگه هدف شما تولید نرم افزار برای سیستم عامل هایی که وجود دارند نیست؟؟؟؟

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

masudafsar
دوشنبه 12 فروردین 1392, 03:06 صبح
نرم افزارم قرار نیست GUI آنچنانی داشته باشه و حتی قرار نیست تجاری یا مختص ویندوز باشه و در مورد SQL Server ، من زمانی که از #C هم استفاده می کردم ، دیتابیس مورد استفادم SQLite بود.

انتخاب SQLite، انتخاب هوشمندانه ای است. من تجربه کار با اون رو ندارم ولی می دونم کابردیه...

یه سوال : برای Query گرفتن از SQLite نیاز به هیچ برنامه یا runtime وجودنداره؟؟؟ چون کار نکردم می پرسم!:لبخند:

masudafsar
دوشنبه 12 فروردین 1392, 03:08 صبح
تعریف از پیشنیاز چیه ؟ من نمی خوام که از توابعی که مخصوص ویندوز یا لینوکس یا هر چیزه دیگه ای هستن یا توابعی که برای اجرا نیاز به Runtime یا چیز دیگه دارند استفاده کنم.

منظورتون همون اختراع دوباره ی چرخ نیست؟؟ از نظر من این دیگه نشدنیه!

BORHAN TEC
دوشنبه 12 فروردین 1392, 10:31 صبح
من از این جهت گفتم خانواده C به درد برنامه های مستقل از یکو نمی خوره چون این زبان در هر سیستم عامل کامپایلر و کتابخانه های خاص خودش رو داره، برای همین سازگار کردن برنامه های نوشته شده با C Family ها با دیگر سیستم عامل ها کاری مشکل و وقت گیره. تازه اون نتیجه رو هم نخواهی گرفت.
این حرف شما تا موقعی درست است که Qt را در نظر نگرفته باشیم. Qt اکثر این مسائل رو حل کرده است.

MinusOne
دوشنبه 12 فروردین 1392, 14:59 عصر
انتخاب SQLite، انتخاب هوشمندانه ای است...
من تنها یک dll رو ضمیمه نرم افزار کردم.

منظورتون همون اختراع دوباره ی چرخ نیست؟؟ از نظر من این دیگه نشدنیه!
منظورم به هیچ وجه اختراع چرخ نیست (البته اگه روزی بتونم اینکارو بکنم بدم هم نمیاد!) . دلیل اینکه از #C به ++C اومدم کار نکردن با .net و تعدادی محدودیت های سطحی دیگه بود ، اگر میخواستم با ++Visual C و net. کار کنم که همون #C برام مناسب بود. من میخوام برنامم cross-platform باشه و برای اینکار هم مطمئنا از Qt استفاده خواهم کرد ولی Qt برای شروع به نظرم خوب نیست به همین دلیل دنبال یه کامپایلر بودم که منو وابسته به توابع خاصی که مربوط به خودشون هست نکنه .

sr2m72
دوشنبه 12 فروردین 1392, 23:59 عصر
انتخاب SQLite، انتخاب هوشمندانه ای است. من تجربه کار با اون رو ندارم ولی می دونم کابردیه...SQLite واسه برنامه های بزرگ به درد نمیخوره ولی واسه برنامه های کوچیک خیلی خوبه.

FastCode
سه شنبه 13 فروردین 1392, 00:48 صبح
البته یادتون باشه همه کارهایی که توی ایران بزرگ حساب میشن در واقع کوچیک هستن.

masudafsar
جمعه 16 فروردین 1392, 14:22 عصر
این حرف شما تا موقعی درست است که Qt را در نظر نگرفته باشیم. Qt اکثر این مسائل رو حل کرده است.

بله حق با شماست ولی ما تو این تاپیک دنبال راهی برای عدم وابستگی به کتابخانه ها و فریمورک ها هستیم وگرنه خیلی چیزها دیگه هم هستن که اگه به ++C اضافه بشن اون وقت تمام زبان های برنامه نویسی باید بیان جلو بوق بزنن!:قهقهه:

masudafsar
جمعه 16 فروردین 1392, 14:25 عصر
من تنها یک dll رو ضمیمه نرم افزار کردم.


فک کنم خیلی چیز های دیگه هم فقط یکی، دوتا فایل DLL بیشتر نیاز نداشته باشه!

masudafsar
جمعه 16 فروردین 1392, 14:31 عصر
یــــــــــــــــــــــــ ـــــــک سوال:
ما این جا داریم فقط کل کل میکنیم و مطمئنا هیچ وقت به نتیجه نمیرسیم. بهتر نیست هرکس کتابخونه هایی که کار کرده رو با مزایای اون بیاد توضیح بده یا اینکه دلیلی برای عدم استفاده از کتابخونه ای بیاره؟؟؟

راستی GTK هم یه چیزی شبیه QT نیست؟؟؟
xWin چیه و کجا کاربرد داره؟

FastCode
جمعه 16 فروردین 1392, 14:49 عصر
من با gtk Qt و gtk# کار کردم.
gtk امکانات خیلی جالب و خاصی در UI داره که هیچ جا پیدا نمیکنید.
ولی Qt فوق العاده گسترده تر هست و پلتفرم های بیشتری رو پشتیبانی میکنه.
gtk# کلا آشغاله.