C++ ভাষাটি C এর সাথে অবজেক্ট ওরিয়েন্টেড ধারণার মত কিছু অতিরিক্ত বৈশিষ্ট্য যোগ করে ডিজাইন করা হয়েছে। বেশিরভাগ C প্রোগ্রাম C++ কম্পাইলার ব্যবহার করেও কম্পাইল করা যেতে পারে। যদিও কিছু প্রোগ্রাম আছে যেগুলো C++ কম্পাইলার ব্যবহার করে কম্পাইল করা যায় না।
আসুন কিছু কোড দেখি, যেগুলো C কম্পাইলারে কম্পাইল করবে, কিন্তু C++ কম্পাইলারে নয়।
এই প্রোগ্রামে C++ কোডের জন্য একটি সংকলন ত্রুটি থাকবে। কারণ এটি এমন একটি ফাংশন কল করার চেষ্টা করছে যা আগে ঘোষণা করা হয়নি। কিন্তু সি তে এটি কম্পাইল হতে পারে
সি.
এর জন্যউদাহরণ
#include<stdio.h> int main() { myFunction(); // myFunction() is called before its declaration } int myFunction() { printf("Hello World"); return 0; }
আউটপুট(C)
Hello World
আউটপুট (C++)
[Error] 'myFunction' was not declared in this scope
C++-এ একটি সাধারণ পয়েন্টার কিছু ধ্রুবক ভেরিয়েবল নির্দেশ করতে পারে না, কিন্তু C-তে এটি নির্দেশ করতে পারে।
সি.
এর জন্যউদাহরণ
#include<stdio.h> int main() { const int x = 10; int *ptr; ptr = &x; printf("The value of x: %d", *ptr); }
আউটপুট(C)
The value of x: 10
আউটপুট (C++)
[Error] invalid conversion from 'const int*' to 'int*' [-fpermissive]
C++ এ, আমরা যখন অন্য কিছু পয়েন্টার ধরন যেমন int*, char* অকার্যকর পয়েন্টারে বরাদ্দ করতে চাই তখন আমাদের স্পষ্টভাবে টাইপকাস্ট করতে হবে, কিন্তু C-তে, যদি এটি টাইপ কাস্ট করা না হয় তবে এটি কম্পাইল করা হবে।
সি.
এর জন্যউদাহরণ
#include<stdio.h> int main() { void *x; int *ptr = x; printf("Done"); }
আউটপুট(C)
Done
আউটপুট (C++)
[Error] invalid conversion from 'void*' to 'int*' [-fpermissive]
C++ এ, আমাদের অবশ্যই ধ্রুবক ভেরিয়েবল শুরু করতে হবে কিন্তু C-তে, এটি আরম্ভ ছাড়াই কম্পাইল করা যেতে পারে।
সি.
এর জন্যউদাহরণ
#include<stdio.h> int main() { const int x; printf("x: %d",x); }
আউটপুট(C)
x: 0
আউটপুট (C++)
[Error] uninitialized const 'x' [-fpermissive]
C-তে আমরা 'new' নামে কিছু ভেরিয়েবল ব্যবহার করতে পারি। কিন্তু C++ এ, আমরা এই নামটিকে পরিবর্তনশীল নাম হিসেবে ব্যবহার করতে পারি না কারণ C++-এ 'নতুন' একটি কীওয়ার্ড। এটি মেমরি স্পেস বরাদ্দ করতে ব্যবহৃত হয়৷
সি.
এর জন্যউদাহরণ
#include<stdio.h> int main() { int new = 10; printf("new: %d",new); }
আউটপুট(C)
new: 10
আউটপুট (C++)
[Error] expected unqualified-id before 'new' [Error] expected type-specifier before ')' token
আমরা C++ এ নিম্নলিখিত কোড কম্পাইল করতে পারি না। যখন আমরা int কে char* এ রূপান্তর করার চেষ্টা করছি তখন এটি একটি ত্রুটি ফিরিয়ে দেবে। কিন্তু C-তে, এটা ঠিক কাজ করবে।
সি.
এর জন্যউদাহরণ
#include<stdio.h> int main() { char *c = 123; printf("c = %u", c); }
আউটপুট(C)
c = 123
আউটপুট (C++)
[Error] invalid conversion from 'int' to 'char*' [-fpermissive]
C তে আমরা void ব্যবহার করতে পারি main() এর রিটার্ন টাইপ হিসেবে, কিন্তু C++ এ, আমাদেরকে int ব্যবহার করতে হবে main() এর রিটার্ন টাইপ হিসেবে।
সি.
এর জন্যউদাহরণ
#include<stdio.h> void main() { printf("Hello World"); }
আউটপুট(C)
Hello World
আউটপুট (C++)
[Error] '::main' must return 'int'