define# یکی از اجزای مفید زبان c است. define# به برنامهنویس این امکان را میدهد که قبل از کامپایل کردن برنامه، به یک مقدار ثابت، نامی را اختصاص دهد. ثابتهایی که با استفاده از define# تعریف میشوند، هیچ فضایی از حافظهی برنامهی روی چیپ را اشغال نمیکنند. کامپایلر در زمان کامپایل، مقدار تعریفشده را به این ثابتها اختصاص خواهد داد. اما این تعریف عوارض جانبی ناخواستهای هم میتواند داشته باشد. بهعنوانمثال اگر اسمی که قبلاً به یک ثابت از نوع define# دادهایم را در نام ثابت یا متغیری دیگر بیاوریم (در نام متغیر یا ثابت، این متنِ اسم نیز آمده باشد)، بهجای این اسم، مقدارِ (عددی یا متنی) تعریفشده در ثابتِ define# قرار خواهد گرفت.
بهطورکلی تعریف ثابتها با استفاده از const ارجحیت دارد و بهتر است بهجای define# از const استفاده شود.
define# در آردوینو سینتکسی مشابه define# در زبان سی دارد:
سینتکس(نحو):
1 2 3 | #define مقدار نامثابت #define constantName value |
توجه کنید که نوشتن # الزامی است.
مثال:
1 2 3 | #define ledPin 3 // The compiler will replace any mention of ledPin with the value 3 at compile time. //کامپایلر در زمان کامپایل هرجا ال ای دی پین را ببیند، به جای آن مقدار سه را قرار میدهد. |
نکته:
پس از define نیازی به استفاده از سمیکولن نیست و اگر قرار بدهید، خطای کامپایلری نامفهومی در ادامه رخ خواهد داد.
1 2 | #define ledPin 3; // this is an error //این نوع نوشتن ارور دارد. |
و همچنین قرار دادن علامت مساوی در عبارت define نیز باعث ارورهای نامعلوم خواهد شد.
1 2 | #define ledPin = 3 // this is also an error //این نیز یک ارور است. |
سلام
خسته نباشید .
بسیار شیوا و کامل توضیح دادید
ممنون موفق و پیروز باشید .
سلام خواهش میکنم دوست عزیز
سلام،
من میخواستم که فرضا Size رو define کنم، ولی مقدار Size قرار هست که از طریق Serial.read() از کاربر دریافت بشه بعد عملیات #define صورت بگیره.
چجور باید اینکارو کرد؟
سلام دوست عزیز
ببینید Define فقط برای ثوابت هست ، مقادیری که توی برنامه هیچ تغییری نمی کنند ، برای این کار شما نمی تونید از Define استفاده کنید چراکه مقدار Size در خلال برنامه ممکنه توسط کاربر تعویض بشه
برای همین باید از متغیر استفاده کنید.