PDA

View Full Version : سوال: در مورد تابع main در vC++.net 2008



jeson_park
دوشنبه 10 فروردین 1388, 23:52 عصر
سلام دوستان من دارم کتاب C++‎ how to program رو می خونم تو سی دی همراه کتاب کامپایلر ویژوال سی پلاس پلاس 6 گذاشته بود که فکر کردم قدیمی و به جاش از کامپایلر VC++‎.net 2008 استفاده کردم وقتی یه فایل win32 consol application یجاد میکنم کد زیر رو درج میکنه

#include"stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}



می خواستم بدونم فایل هدر stdafx چی هست
و بعد چرا تابع main ای نطوری هست(توی کتاب یه جور دیگست!)
چرا نمیشه تابع main رو به روشی که تو کتاب هست نوشت
ممنون میشم

Sundown
سه شنبه 11 فروردین 1388, 00:07 صبح
با سلام و کسب اجازه از اساتید :
در مورد هدر باید بگم توی 6++VC هم این هدر هست و اگر برداشته بشه برنامه اصلا کاپایل نمیشه نمیدونم چرا ؟
اما در مورد تابع Main باید بگم اون کتابی که شما گرفتید مربوط ++C هست و این برنامه سی پلاس پلاس دات نت هست. این دو تا رو با هم اشتباه نگیرید درست اسمشون یکی هست و دستوراتشون شبیه هم هست اما از خیلی لحاظ باهم فرق دارند ...
برای همین تابع Main توی کتاب و توی برنامه با هم فرق دارند برای نوشتن برنامه های برنامه ++C که در کتاب دیتل میخونید شما بهتر است از ++Turbo C استفاده کنید
در مورد آرگومانهای تابع هم باید گفت شما میتونید این آرگومانها رو بردارید و میتونید بر هم ندارید
این آرگومانها برای این هست که برنامه شما بعد از کامپایل بتونه در هنگام اجرا مقادیری رو دریافت و روی اون مقادیر کاری رو انجام دهد و یا ازشون استفاده کنه ( مثلا برنامه Mspaint در ویندوز تابع Main اون این طوری نوشته شده تا کاربر بتونه آدرس یک عکس رو بعد از نام برنامه به برنامه بده تا برنامه اون عکس بعد از اجرا شدن باز کنه
کد زیر رو در Run بنویسید


mspaint C:\1.jpg
در واقع رشته ای که بعد نام برنامه در Run نوشته شده باعث میشود که این عکس در برنامه باز بشود
شاید برنامه نویسان Paint تابع Main اون رو این طور نوشتن


void Main(char x[500])



شاید ؟!

jeson_park
سه شنبه 11 فروردین 1388, 00:29 صبح
خوب چرا به جای main از _tmain استفاده شده؟
در ضمن من توی VC 6 از tdafx.h استفاده نمی کردم!! اصلا نبودش و کامپایلر هم خطا نمی گرفت! من از iostream استفاده می کردم!

Sundown
سه شنبه 11 فروردین 1388, 01:29 صبح
خوب چرا به جای main از _tmain استفاده شده؟

تابع Main من این طور نیست


در ضمن من توی VC 6 از tdafx.h استفاده نمی کردم!! اصلا نبودش و کامپایلر هم خطا نمی گرفت! من از iostream استفاده می کردم!
منظورم توی برنامه های Consol Application بود. همیشه هست و اگر برداشته بشه خطا میگیره نمیدونم چرا ؟

MIDOSE
سه شنبه 11 فروردین 1388, 01:54 صبح
خوشبختم منم مثل شما دارم همین کتاب را می خونم متاسفانه در اویل کار مانند شما به همین مشکل بر خوردم من رفتم سر VC6 و خودم را راحت کردم تا ابتدا زمینه اش را داشته باشم در مورد VC6 دوست عزیز فکر کنم اشتباه گرفتی اون باید vc.net باشه نه vc6 البته من به خاطر ظاهرش و اینکه گفتی به هدر خطا میده گفتم چون من تو محیط کنسول دارم کار می کنم و اصلا چنین مشکلی نبیست در مورد vc 2008 اطلاعاتم کمه ولی مایکروسافت یه تغییراتی داده مانند اضافه شدن همین هدر و ... البته کم هستند ولی برای کتاب ها(و تازه کارهایی مثل من مشکل سازند تا می اییم را بیفتیم طول می کشه) مشکل ساز شده
http://barnamenevis.org/forum/showthread.php?t=127644
یک سری بزن کمکت می کنه.

Nima_NF
سه شنبه 11 فروردین 1388, 02:57 صبح
خوب چرا به جای main از tmain_ استفاده شده؟ در کامپایلرهای جدید پیش فرض یونیکد هست، یعنی مثلا کلمات فارسی هم می توانید در رشته ها ذخیره کنید و یا از طریق command prompt به برنامه بفرستید. (به شرط اینکه به جای char از TCHAR استفاده کنید)
پس اگر قرار نیست unicode را پشتیبانی کنید و فقط اسکی است در این صورت به راحتی آن را پاک کنید و با main معمولی جایگزین کنید. که بر اساس char هست نه TCHAR



می خواستم بدونم فایل هدر stdafx.h چی هست Precompiled Header هست که باعث سریع تر شدن کامپایل در دفعات بعدی می شود (به خاطر محدود کردن کامپایل به هدر فایل های داخل آن) . یک فایل .h است که هدر فایل های کتابخانه های استفاده شده در برنامه در آن تعریف می شود (include#) ، مانند tchar.h و stdio.h و ... برای اینکه فایل یا فایل های cpp اصلی شما شلوغ نشود و تکرار تعریف انجام نشود و کامپایل سریع تر شود، هدر فایل ها در آن include می شوند.

اگر می خواهید این فایل در برنامه نباشد باید کلا آن را از solution explorer پروژه حذف کنید و هرجایی که نام stdafx.h استفاده شده است حذف گردد و هدر فایل های include شده داخل آن را مجددا در بالای فایل اصلی cpp مجددا تعریف کنید.

و از تنظیمات کامپایلر آن را حذف کنید، به شکل زیر:
به منوی project و سپس properties بروید، سپس قسمت زیر:


C/C++ -> Precompiled Headers -> Create/Use Precompiled Header
در آنجا گزینه Not Using Precompiled Headers را انتخاب کنید.



چرا نمیشه تابع main رو به روشی که تو کتاب هست نوشتمی شود.
شما نیاز ندارید هیچ کدام از موارد بالا را انجام دهید، وقتی یک پروژه win32 console application می سازید در wizard ظاهر شده Next را بزنید و گزینه Empty Project را انتخاب کنید. این پروژه خالی هست و فقط کافیست یک فایل cpp در آن بسازید و کد کتاب را در آن کپی کنید. نه فایل stdafx.h نیاز هست نه tmain و ....



منظورم توی برنامه های Consol Application بود. همیشه هست و اگر برداشته بشه خطا میگیره نمیدونم چرا ؟ شما پروژه را اشتباه ساخته اید، Console Application برای کار با .NET توسط C++/CLI هست و با پروژه win32 console application فرق می کند. شما در برنامه هایی کنسولی معمولی که می نویسند باید همین win32 را بسازید تا غیر دات نتی باشد.