আমি একটি মঞ্চে একটি আকর্ষণীয় প্রশ্নে হোঁচট খেয়েছি অনেক আগে and এবং আমি উত্তরটি জানতে চাই।
নিম্নলিখিত সি ফাংশন বিবেচনা করুন:
f1.c
#include <stdbool.h>
bool f1()
{
int var1 = 1000;
int var2 = 2000;
int var3 = var1 + var2;
return (var3 == 0) ? true : false;
}
এই সবসময় ফেরত পাঠাবেন falseযেহেতু var3 == 3000। mainফাংশন ভালো দেখায়:
main.c
#include <stdio.h>
#include <stdbool.h>
int main()
{
printf( f1() == true ? "true\n" : "false\n");
if( f1() )
{
printf("executed\n");
}
return 0;
}
যেহেতু f1()সর্বদা ফিরে আসা উচিত false, তাই কেউ আশা করে যে প্রোগ্রামটি কেবলমাত্র একটি পর্দায় মিথ্যা মুদ্রণ করবে। তবে এটি সংকলন ও চালনার পরে মৃত্যুদন্ড কার্যকর করা হবে :
$ gcc main.c f1.c -o test
$ ./test
false
executed
তা কেন? এই কোডটি কি কোনও ধরণের অপরিজ্ঞাত আচরণ করে?
দ্রষ্টব্য: আমি এটি দিয়ে সংকলিত gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2।
main()সরলীকৃত যেতে পারে int main() { puts(f1() == true ? "true" : "false"); puts(f1() ? "true" : "false"); return 0; }এটা উত্তম অমিল দেখাতে হবে -।
void?
trueএবং falseকে & R এর 1 ম ইডি হবে।, তাই না সব সময়ে ধরনের সমস্যা ছিল। এটি কেবল 0 এবং সত্য এবং মিথ্যা জন্য শূন্য নয়। তাই না? আমি জানি না যে প্রোটোটাইপগুলি তখন পাওয়া যায়।
_Boolপ্রকার ছিল না এবং <stdbool.h>শিরোনাম ছিল না ।
f1()একই ফাইলটিতে অনুলিপি করে থাকেন তবেmain()কিছুটা অদ্ভুততা পাবেন: যদিও()খালি প্যারামিটার তালিকার জন্য সি ++ ব্যবহার করা সঠিক, সি -তে এটি এখনও-সংজ্ঞায়িত পরামিতি তালিকার কোনও ফাংশনের জন্য ব্যবহৃত হয় ( এটি মূলত এর পরে একটি কে & আর-স্টাইলের প্যারামিটার তালিকাটি আশা করে))। সঠিক সি হতে আপনার কোডটি এতে পরিবর্তন করা উচিতbool f1(void)।