زبان برنامه نویسی سی/مقدمه‌ای بر پیش پردازنده‌ها

ویکی‎کتاب، کتابخانهٔ آزاد
پرش به ناوبری پرش به جستجو
Gnome-go-last.svg
Gnome-go-first.svg

اگر مطالب پیشین را مطالعه نموده باشید ، می دانید که خارج از محدوده رشته و یا کاراکتر ؛ اگر از علامت شارپ # استفاده نمائید ، شما مجاز و مجبور به استفاده از تنها یک چیز خواهید بود ، آن هم پیش پردازنده ها هستند . اما در ادامه باید بگوئیم که شما در صورت استفاده از دو زیر خط یعنی دو _ که به صورت __ در می آید ، مجاز و مجبور به استفاده از تنها یک چیز خواهید بود و آن هم ماکرو ها هستند . پیش پردازنده ها دستوراتی هستند که اولویت اجرایی بر تمام کدهای متن شما دارند و به شما اجازه می دهند تا بر کامپایل و اجرای برنامه خود نظارت و حاکمیت داشته باشید

ماکروها نیز واحد های جاری هستند که مطمئناً در برنامه های خود به آنها احتیاج پیدا خواهید نمود . مثلاً زمان کامپایل برنامه ، زمان فعلی ، اسم فایلی که در حال کامپایل است ، همگی امکاناتی هستند که ماکروها برای شما فراهم می‌آورند و با دو زیر خط آغاز شده ، سپس حروف دستور ماکرو و در نهایت دو زیر خط دیگر ، دوباره نوشته می‌شوند تا در انتهای حروف دستور قرار بگیرند و به یک ماکروی قابل فهم برای کامپایلر در بیایند

یکی از مهم ترین پیش پردازنده ها دستور include می باشد که به صورت include# نوشته می شود . شما در زبان سی ، بدون تابع های کتابخانه ای ؛ تنها مجاز به ایجاد داده ها و پردازش های محاسباتی و منطقی هستید که می تواند به صورت عددی یا حروفی باشد . اما قادر نخواهید بود که با سخت افزار و یا سیستم عامل ، ارتباط برقرار کنید تا بتوانید اطلاعاتی را بگیرید و آن را بر اساس برنامه خود ، مورد پردازش قرار دهید و در نهایت آن را به یک خروجی مثل مانیتور بفرستید . بنابراین برنامه نویسی برای شما هیچ مفهومی نخواهد داشت . از طرفی گاهی پیش می‌آید که شما علاوه بر اینکه در برنامه خود شرط کرده‌اید که فقط در صورت خاصی ، تابع نوشته شده توسط شما اجرا گردد ؛ اما میخواهید یک قسمت از برنامه خود که مثلاً شامل تعریف یک متغیر می‌گردد و یا اصلاً وجود یک تابع را شامل می شود که شما میخواهید نه تنها اجرا نگردد ، بلکه کلاً توسط کامپایلر ، نادیده گرفته شود ( به مثابه اینکه اصلاً آن تابع را ننوشته اید ) و شما با پیش‌پردازنده‌های شرطی که تعیین می‌کنید ، به کامپایلر دستور می‌دهید تا مقصود شما را برآورده نماید

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

چند نکته در مورد نوشتن پیش پردازنده‌ها ضروری می‌باشد . اول اینکه شما مجاز و مجبور به استفاده از هر پیش پردازنده ، فقط در یک خط هستید ؛ بنابراین اگر میخواهید چند پیش پردازنده بنویسید ، باید آنها را در چند خط بنویسید . دومین مورد اینکه از استفاده غیر ضروری از پیش پردازنده‌ها بپرهیزید . مثلاً شما میخواهید از چند تابع کتابخانه‌ای استفاده کنید ، اما با خود می گوئید بگذار تمام فایل های سرآیند را ضمیمه کنم ! و با خیال راحت ، هر آنچه خواستم بنویسم ! این کار شما را گیج خواهد کرد و امکان نوشتن کد خطا در برنامه شما را افزایش می‌دهد . یا مثلاً شما میخواهید در داخل برنامه خود شروطی را برای توابع ، تعیین کنید ، در این صورت بهتر است از دستورات داخل برنامه کمک بگیرید و نه اینکه آن را با پیش پردازنده‌ها شرطی کنید . این کار شما فقط در صورتی مفهوم خواهد داشت که کاملاً به برنامه نویسی و زبان سی ، مسلط باشید . در غیر این صورت ممکن است خطاهایی را ایجاد کنید که هر چه تلاش کنید تا ایراد را برطرف کنید ، نتیجه‌ای حاصل نگردد . حال آنکه شما به خاطر استفاده بی‌جا ، به برنامه خود آسیب وارد کرده‌اید

برخی از دستورات پیش پردازنده ، تخصصی و پیشرفته می‌باشند و بیشتر در برنامه‌نویسی سطح پائین به کار می‌روند . تنها در زمان مناسب که به برنامه‌نویسی تسلط یافتید از آنها بهره بگیرید و در غیر این صورت اگر یک برنامه نویس مبتدی هستید و برنامه خود را می‌نویسید و کدهایی را وارد می کنید که از آنها ، سر در نمی‌آورید ، به راحتی برنامه خود را ممکن است دچار عیب و نقص نمائید