নিম্নলিখিত প্রোগ্রামে কোডের কতটি লাইন রয়েছে?
#include <iostream>
int main()
{
std::cout << "Hello, world!\n";
return 0;
}
আপনি সম্ভবত 7 টি উত্তর দিয়েছেন (বা 6 আপনি যদি ফাঁকা লাইন গণনা করেন না, বা 4 আপনি যদি ধনুর্বন্ধনী গণনা করেন না)।
আপনার সংকলকটি অবশ্য খুব আলাদা কিছু দেখেছে:
~$ cpp hello.cpp | wc
18736 40822 437015
হ্যাঁ, এটি কেবলমাত্র একটি "হ্যালো, বিশ্ব!" কার্যক্রম. সি ++ সংকলককে সমস্ত কিছু পার্স করতে হবে। এটি অন্যান্য কারণগুলির তুলনায় সি ++ সংকলনটি এত বেশি সময় নেয় কেন এবং আধুনিক ভাষা কেন শিরোনাম ফাইলগুলি বন্ধ করে দেয় এটি একটি প্রধান কারণ ।
আরও ভাল প্রশ্ন হবে
কেন নেই C ++ হেডার ফাইল আছে?
সি ++ সি এর সুপারসেট হিসাবে ডিজাইন করা হয়েছিল, সুতরাং এটি পিছনের সামঞ্জস্যের জন্য হেডার ফাইলগুলি রাখতে হয়েছিল।
ঠিক আছে, তাহলে সি এর কেন হেডার ফাইল আছে?
কারণ এর আদিম পৃথক সংকলন মডেল। সি সংকলক দ্বারা উত্পাদিত অবজেক্ট ফাইলগুলি কোনও ধরণের তথ্য অন্তর্ভুক্ত করে না, সুতরাং ধরণের ত্রুটিগুলি রোধ করতে আপনার উত্স কোডে এই তথ্যটি অন্তর্ভুক্ত করতে হবে।
~$ cat sqrtdemo.c
int main(void)
{
/* implicit declaration int sqrt(int) */
double sqrt2 = sqrt(2);
printf("%f\n", sqrt2);
return 0;
}
~$ gcc -Wall -ansi -lm -Dsqrt= sqrtdemo.c
sqrtdemo.c: In function ‘main’:
sqrtdemo.c:5:5: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
sqrtdemo.c:5:5: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
~$ ./a.out
2.000000
যথাযথ প্রকারের ঘোষণাগুলি যুক্ত করা বাগটি সংশোধন করে:
~$ cat sqrtdemo.c
#undef printf
#undef sqrt
int printf(const char*, ...);
double sqrt(double);
int main(void)
{
double sqrt2 = sqrt(2);
printf("%f\n", sqrt2);
return 0;
}
~$ gcc -Wall -ansi -lm sqrtdemo.c
~$ ./a.out
1.414214
লক্ষ্য করুন যে কোনও #include
এস নেই। তবে আপনি যখন বহুল সংখ্যক বাহ্যিক ফাংশন ব্যবহার করেন (যা বেশিরভাগ প্রোগ্রামগুলি করবে), ম্যানুয়ালি এটিকে ঘোষণা করা ক্লান্তিকর এবং ত্রুটি-প্রবণ হয়ে পড়ে। হেডার ফাইলগুলি ব্যবহার করা অনেক সহজ।
আধুনিক ভাষা কীভাবে হেডার ফাইলগুলি এড়াতে সক্ষম?
টাইপ তথ্য অন্তর্ভুক্ত একটি ভিন্ন অবজেক্ট ফাইল ফর্ম্যাট ব্যবহার করে। উদাহরণস্বরূপ, জাভা * .ক্লাস ফাইল ফর্ম্যাটে "বর্ণনাকারী" রয়েছে যা ক্ষেত্র এবং পদ্ধতির পরামিতিগুলির ধরণ নির্দিষ্ট করে।
এটি কোনও নতুন আবিষ্কার ছিল না। এর আগে (1987), যখন বোরল্যান্ড টার্বো পাস্কেল ৪.০-এ আলাদাভাবে সংকলিত "ইউনিট" যুক্ত করেছিল, তখন শিরোনামের ফাইলগুলির প্রয়োজনীয়তা অপসারণ করার জন্য *.TPU
টার্বো সি-র পরিবর্তে একটি নতুন বিন্যাস ব্যবহার করা বেছে নিয়েছিল *.OBJ
।