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

সি/সি++-তে ভেরিয়েবল নাম নম্বর দিয়ে কেন শুরু হয় না?


সি/সি++-এ, একটি ভেরিয়েবল নামে অ্যালফাবেট, নম্বর এবং আন্ডারস্কোর (_) ক্যারেক্টার থাকতে পারে। সি/সি++ ল্যাঙ্গুয়েজে কিছু কিওয়ার্ড আছে, সেগুলো বাদে বাকি সবটাকে আইডেন্টিফায়ার (identifier) হিসেবে বিবেচনা করা হয়। আইডেন্টিফায়ার হলো ভেরিয়েবল, কনস্ট্যান্ট, ফাংশন ইত্যাদির নাম।

আমরা সেই আইডেন্টিফায়ার নির্দিষ্ট করতে পারি না যা নম্বর দিয়ে শুরু হয় কারণ কম্পাইলারের সাতটি ফেজ (phase) থাকে নিচের মতো:

  • Lexical Analysis (লেক্সিক্যাল এনালাইসিস)
  • Syntax Analysis (সিনট্যাক্স এনালাইসিস)
  • Semantic Analysis (সেম্যান্টিক এনালাইসিস)
  • Intermediate Code Generation (ইন্টারমিডিয়েট কোড জেনারেশন)
  • Code Optimization (কোড অপ্টিমাইজেশন)
  • Code Generation (কোড জেনারেশন)
  • Symbol Table (সিম্বল টেবিল)
  • উপরের কোনো ফেজই ভেরিয়েবল নম্বর দিয়ে শুরু হওয়াকে সাপোর্ট করে না। এটি কারণ কম্পাইলার বিভ্রান্ত হয়ে যায় যে এটি একটি নম্বর নাকি আইডেন্টিফায়ার যতক্ষণ না একটি অ্যালফাবেট পায় নম্বরগুলো পার করার পর। তাই কম্পাইলারকে লেক্সিক্যাল এনালাইসিস ফেজে ব্যাকট্র্যাক (backtrack) করতে হয় যা সাপোর্টেড নয়। কম্পাইলারকে ফার্স্ট ক্যারেক্টার দেখেই একটি টোকেন কি আইডেন্টিফায়ার নাকি লিটারেল সেটি শনাক্ত করতে হয়।

নিচে একটি উদাহরণ দেওয়া হলো যা সি-তে ভেরিয়েবল ডিক্লেরেশন প্রদর্শন করে।

উদাহরণ

#include <stdio.h>

int main() {
    int 5s = 8;
    int _4a = 3;
    int b = 12;
    printf("The value of variable 5s : %d", 5s);
    printf("The value of variable _4a : %d", _4a);
    printf("\nThe value of variable b : %d", b);
    return 0;
}

উপরের প্রোগ্রামটি একটি এরর দেবে "invalid suffix 's' on integer constant" কারণ একটি ভেরিয়েবল ৫ দিয়ে শুরু হয়েছে। যদি আমরা এটি সরিয়ে দি, তবে প্রোগ্রামটি সঠিকভাবে কাজ করবে।

নতুন প্রোগ্রাম উদাহরণ নিচে দেওয়া হলো।

উদাহরণ

#include <stdio.h>

int main() {
    int _4a = 3;
    int b = 12;
    printf("The value of variable _4a : %d", _4a);
    printf("\nThe value of variable b : %d", b);
    return 0;
}

আউটপুট

উপরের প্রোগ্রামের আউটপুট নিচের মতো:

The value of variable _4a : 3
The value of variable b : 12
  1. C/C++-এ গ্লোবাল ভেরিয়েবল কেন খারাপ?

  2. কেন C/C++-এ গ্লোবাল ভেরিয়েবল এড়ানো উচিত?

  3. C++-এ ভেরিয়েবল, তাদের টাইপ এবং স্কোপ

  4. C#-এ ভেরিয়েবল স্কোপ (Variable Scope)