এই চ্যালেঞ্জের ধারণাটি বেশ সহজ। আপনাকে যা করতে হবে তা হ'ল একটি প্রোগ্রাম লিখুন যা বৈধ সি এবং বৈধ সি ++ উভয়ই সংকলন করবে! ঠিক আছে, কিছু ক্যাচ আছে। প্রতিটি ভাষায় সংকলিত হওয়ার সময় প্রোগ্রামটি অবশ্যই আলাদাভাবে আচরণ করবে। "আলাদাভাবে আচরণ করা" বিবেচনা করার জন্য প্রোগ্রামটির প্রতিটি ভাষার আলাদা আলাদা আউটপুট থাকতে হবে।
বিধি
- প্রোগ্রামটি অবশ্যই বৈধ সি এবং সি ++ উভয়ই হতে পারে
- প্রোগ্রামটি সংকলিত ভাষার উপর ভিত্তি করে প্রোগ্রামটির অবশ্যই আলাদা আউটপুট থাকতে হবে।
#ifdef __cplusplus
বা অন্যান্য "ইজি" প্রিপ্রসেসর কৌশলগুলি নিরুৎসাহিত করা হয়! (অন্যান্য প্রিপ্রোসেসর অপারেশনগুলি পুরোপুরি ঠিক আছে, যদিও))- এটিকে পুরোপুরি সুস্পষ্ট না দেখানোর চেষ্টা করুন যে প্রোগ্রামটি কিছু আলাদা করে।
এটি একটি জনপ্রিয়তা-প্রতিযোগিতা , সুতরাং যার মধ্যে সবচেয়ে আকর্ষণীয় এবং আশ্চর্যজনক সমাধানটি জয়ী হয়। আনন্দ কর!
উদাহরণ:
#ifdef
কৌশলগুলি চালিয়ে যাওয়া এমনকি সম্ভব ছিল কিনা তা দেখার জন্য আমি আমার নিজস্ব প্রোগ্রাম তৈরি করেছি :
#include <stdio.h>
#include <string.h>
char *m="C++ rules!";
int t[11]={0,0,0,0,1,-1,-3,9,-8,82,0};
char tr(char c,int i)
{
return c+((sizeof('!')+1)&1)*t[i];
}
int main()
{
int i = 0;
for(;i<strlen(m);i++)
{
printf("%c",tr(m[i],i));
}
printf("\n");
return 0;
}
এই প্রোগ্রামটি আউটপুটগুলি C++ rules!
যখন সি ++ এ C++ stinks
সংকলিত হয় এবং যখন সি-তে সংকলিত হয় when
ব্যাখ্যা:
ভাষার মধ্যে পার্থক্যের কারণ কী তা হ'ল
tr()
ফাংশন। সি এবং সি ++ এর মধ্যে একটি পার্থক্যের সুবিধা গ্রহণ করে, বিশেষত, চর অক্ষরগুলি কীভাবে আচরণ করা হয়। সি-তে, তাদের পূর্ণসংখ্যা হিসাবে বিবেচনা করা হয়, সুতরাংsizeof('!')
সি ++ এ 1 এর বিপরীতে 4 প্রদান করে।((...+1)&1)
অংশ একটি সহজ, bitwise অপারেশন 1 ফিরে আসবে যদি শুধু অংশsizeof('!')
আয় 4, এবং 0 যদি ফিরে আসে 1. ফলে সংখ্যা অ্যারের মধ্যে আছে ints দ্বারা গুন করা হয় যেt
এবং তারপর সেই পণ্যের পরিশেষে নির্দিষ্ট অক্ষর রুপান্তরিত হচ্ছে যোগ করা হয়। সি ++ এ পণ্য সর্বদা শূন্য হবে, সুতরাং স্ট্রিংC++ rules!
অপরিবর্তিত থাকবে। সি-তে, পণ্যটি সর্বদা মান হিসাবে হয়t
এবং তাই স্ট্রিংটি এতে পরিবর্তিত হয়C++ stinks
।