সাধারণত সিতে, আমাদের কম্পিউটারকে ভেরিয়েবল ডিক্লেয়ারেশনে ডেটার ধরণটি জানাতে হয়। উদাহরণস্বরূপ, নিম্নলিখিত প্রোগ্রামে, আমি দুটি ভাসমান পয়েন্ট সংখ্যা এবং এক্স এর যোগফল মুদ্রণ করতে চাই Y
#include<stdio.h>
main()
{
float X=5.2;
float Y=5.1;
float Z;
Z=Y+X;
printf("%f",Z);
}
আমাকে কম্পাইলারটি জানাতে হয়েছিল ভেরিয়েবল এক্স এর ধরণ type
- সংকলক
X
নিজে থেকে প্রকারটি নির্ধারণ করতে পারে না ?
হ্যাঁ, আমি যদি এটি করি তবে এটি করতে পারে:
#define X 5.2
আমি এখন আমার প্রোগ্রামটি লিখতে পারি সংকলককে প্রকারটি না বলে X
:
#include<stdio.h>
#define X 5.2
main()
{
float Y=5.1;
float Z;
Z=Y+X;
printf("%f",Z);
}
সুতরাং আমরা দেখতে পাই যে সি ভাষার কোনও প্রকারের বৈশিষ্ট্য রয়েছে যা ব্যবহার করে এটি নিজের থেকে ডেটা ধরণের নির্ধারণ করতে পারে। আমার ক্ষেত্রে এটি নির্ধারিত হয় যে X
টাইপ ফ্লোট।
- যখন আমরা কিছু (মূল) তে ঘোষণা করি তখন কেন আমাদের উপাত্তের ধরণ উল্লেখ করতে হবে? সংকলকটি কেন নিজের
main()
মতো করে কোনও ভেরিয়েবলের ডেটা টাইপ নির্ধারণ করতে পারে না#define
।
#define X 5.2
, X
না একটি পরিবর্তনশীল একটি ধ্রুবক, তাই এটি আক্ষরিক সঙ্গে প্রাক প্রসেসর হতে প্রতিস্থাপিত হয়, কিন্তু 5.2
যে কোন জায়গায় উল্লেখ করেছে X
। আপনি পুনরায় নিয়োগ দিতে পারবেন না X
।
auto
আসলে আপনি যা চান তা করেন)। অন্যদিকে, আপনি যদি মনে করেন যে আপনার কোডটি কী করছে এবং আপনি আসলে অন্য কিছু টাইপ করেছেন তবে স্ট্যাটিক টাইপিং এটি একটি বিশাল সমস্যা হওয়ার আগেই এর আগে ত্রুটি ঘটবে। প্রতিটি ভাষা ভারসাম্য রোধ করে: স্ট্যাটিক টাইপিং, টাইপ ইনফেরেন্স, ডায়নামিক টাইপিং। কিছু কাজের জন্য অতিরিক্ত টাইপিংয়ের পক্ষে এটি যথার্থ। অন্যদের জন্য, এটি একটি নষ্ট।
5.2
এটি হ'লdouble
, সুতরাং প্রথম প্রোগ্রামটি ডাবল লিটারেলগুলিকেfloat
যথার্থতার সাথে চক্রাকার করে দেয় , তারপরে এগুলিকে ফ্লোট হিসাবে যুক্ত করে, যখন দ্বিতীয়টি 5.1 এর ডাবল উপস্থাপনা ফিরে আসেdouble
এবং সংযোজনdouble
ব্যবহার করে এটি 5.2 মানের সাথে যুক্ত করেdouble
, তারপরে সেই গণনার ফলাফলকেfloat
সুস্পষ্ট করে দেয় । যেহেতু বিভিন্ন স্থানে রাউন্ডিং ঘটে, ফলাফল ডফার হতে পারে। এটি অন্যথায় অভিন্ন প্রোগ্রামের আচরণকে প্রভাবিত করে পরিবর্তনশীলগুলির প্রকারের জন্য কেবল একটি উদাহরণ।