কম্পিউটার টিউটোরিয়াল

সি ভাষায় #define এবং const এর পার্থক্য

সি প্রোগ্রামিং-এ কনস্টান্ট মান সংজ্ঞায়িত করার দুটি পদ্ধতি রয়েছে: #define (প্রিপ্রসেসর ম্যাক্রো) এবং const কীওয়ার্ড। যেসব সতহে আউটপুট একই দেখতে পারে, তবে তাদের কাজ করার পদ্ধতি এবং কম্পাইলার্সের দৃষ্টিতে বড় পার্থক্য রয়েছে।

#define (প্রিপ্রসেসর ডাইরেক্টিভ)

  • প্রিপ্রসেসর стаেজে টেক্সট সাবস্টিটিউশন করে
  • কম্পাইলার কখনোই ম্যাক্রোর নাম দেখে না — শুধু মান দেখে
  • মেমরি অকুপায় করে না (ভেরিয়েবল নয়)
  • টাইপ চেকিং নেই — শুধু টেক্সট রিপ্লেসমেন্ট
  • স্কোপ নিয়ম মানেনা (ফাইল স্কোপ বা ব্লক স্কোপ নেই)

const (কনস্ট্যান্ট ভেরিয়েবল)

  • এটি একটি আসল ভেরিয়েবল — মেমরি অকুপায় করে
  • কম্পাইলার টাইপ চেকিং করে
  • স্কোপ নিয়ম মানى (ব্লক স্কোপ, ফাইল স্কোপ)
  • ডিবাগারে দেখতে পাওয়া যায় (সিম্বল টেবিলে থাকে)
  • পয়েন্টার দিয়ে কাস্ট করে মান পরিবর্তন করা সম্ভব (যদিওUndefined Behavior)

তুলনা

#define PI 3.14159      // ম্যাক্রো — টেক্সট রিপ্লেসমেন্ট
const double PI = 3.14159; // কনস্ট ভেরিয়েবল — টাইপ সেফ

অপ্টিমাইজেশন নোট

আধুনিক অপ্টিমাইজিং কম্পাইলার (GCC -O2, Clang, MSVC) const ভেরিয়েবলকে কনস্টান্ট প্রোপাগেশন দিয়ে সরাসরি কোডে ইম্বেড করে দেয়। তাই মেমরি ও পারফরম্যান্সে কোনো প্রায়োগিক পার্থক্য থাকে না।

সুপারিশ

  • প্রाथমিকতা দিন const / constexpr (C++)-কে — টাইপ সেফটি, ডিবাগিং, স্কোপিং
  • #define শুধু তখন ব্যবহার করুন যখন প্রিপ্রসেসর-লেভেল ম্যানিপুলেশন দরকার (যেমন কন্ডিশনাল কম্পাইলেশন, টোকেন পেস্টিং)
  • ম্যাজিক নাম্বার এড়াতে const বা enum ব্যবহার করুন
  1. C#-তে readonly এবং const কীওয়ার্ডের পার্থক্য

  2. C# এবং Visual C#-র পার্থক্য

  3. C# এবং .NET-এর পার্থক্য

  4. Go এবং Java-এর পার্থক্য