PDA

View Full Version : کاربرد دستور های ,else, #elif, #endif, #define , #if#



amirjalili
پنج شنبه 19 فروردین 1389, 10:30 صبح
دستورهای #else, #elif, #endif, #define و if# به چه دردی میخورند. msdn رو دیدم اما چیزی درست و درمون متوجه نشدم. از دوستان اگر کسی میدونه راهنمایی کنید..
ممنون.
اینم لینک msdn
http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx

linux
پنج شنبه 19 فروردین 1389, 11:17 صبح
برای زمان کامپایل شدن هست فرض کنید برنامه ای نوشتید که 2 نسخه داره ، یک نسخه مثلا فقط کارهای پایه را انجام می دهد و یک نسخه تمام قابلیت ها را دارد. مطمئنا شما نمی آید دوتا پروژه تعریف کنید، یک پروژه تعریف می کنید و از این دستورات برای کامپایل استفاده می کنید. اگر شرط بر قرار بود آن قسمت کامپایل خواهد شد در غیر اینصورت اصلا کامپایل نمی شود. شاید شما بگید خوب چه کاری هست با یک متغیر در برنامه نسخه برنامه را چک می کنم و در صورت برقراری شرط این کار را انجام می دهم ، خوب برنامه شما اگر کرک شود ، براحتی همه برنامه قابل اجرا خواهد بود ولی در این روش اصلا کدی کامپایل نمی شود.
در همین مثال

#define DEBUG
// ...
#if DEBUG
Console.WriteLine("Debug version");
#endif


اگر خط اول را حذف کنید کد مابیل شرط کامپایل نخواهد شد.
فکر کنید یک برنامه نوشتید که یک نسخه دمو دارد ، و یک نسخه نهایی ، شما نسخه دمو را به همه خواهید داد چه روشی را استفاده خواهید کرد که اگر نسخه دمو کرک شما برنامه شما ایمن باشد؟

amirjalili
جمعه 20 فروردین 1389, 19:46 عصر
با تشکر از شما ..
لطفا معنی کد های زیر را توضیح دهید.


#define DEBUG
// ...
#if DEBUG
Console.WriteLine("Debug version");
#endif


Debug اینجا یعنی چی که ابتدا تعریفش کرده.. بعد گفته if Debug# ..
معنی کد بالا چیست؟
یا در مثال پایین که از سایت MSDN نقل میکنم :



#define DEBUG
#define MYTEST
using System;
public class MyClass
{
static void Main()
{
#if (DEBUG && !MYTEST)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && MYTEST)
Console.WriteLine("MYTEST is defined");
#elif (DEBUG && MYTEST)
Console.WriteLine("DEBUG and MYTEST are defined");
#else
Console.WriteLine("DEBUG and MYTEST are not defined");
#endif
}
}


MyTest که در بالا تعریف شده به چه معنی است؟ بالاخره یه معنایی اینها باید داشته باشند که آنها رو در شرط قرار میدهیم.
با تشکر

misoft.ir
یک شنبه 22 فروردین 1389, 12:17 عصر
سلام
تیتر انگلیسی این موضوع Preprocessor Directives میباشد(برای جستجو گفتم)
فرض کنید شما یه برنامه مینویسید که در ابتدای برنامه یه پیغام یا فرم لوگین نمایش داده میشه.
در طول برنامه نویسی و تست برنامه این کار اعصاب خوردکنه.
شما میایید این پیش پردازندها رو به کارمیگیرد
با این روش که ابتدا در قسمت Using ابتدا
#define متغیر را تعریف میکنید
نکته ای که اینجا هست اینه که نام متغیر اختیاری هست در پست قبل MYTEST و DEBUG .
بعد با #if و #elif و دیگر پیش پردازنده ها کدتون رو مدیریت میکنید.
برای مثال اگر در برنامه پست قبل DEBUG فعال و MYTESTفعال نباشد(از قسمت Using حذفش کرده باشید)
این خط اجرا میشود
Console.WriteLine("DEBUG is defined");

misoft.ir
یک شنبه 22 فروردین 1389, 12:23 عصر
سلام مجدد
رایجترین پیش پردازنده ها :



#define #elif #line #pragma warning
#undef #endif #region #pragma checksum
#if #warning #endregion
#else #error #pragma


به نظر من کتاب Wrox_C# 2008 Programmer’s Reference دراین رابطه میتونه مفید باشه .[فکر نکنید خیلی زبان بلدم ، کتابش رو ساده نوشتند]