আমি একটি মঞ্চে একটি আকর্ষণীয় প্রশ্নে হোঁচট খেয়েছি অনেক আগে 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)
।