ব্যবহার করুন __LINE__
, তবে এর ধরন কী?
লাইন বর্তমান উত্স রেখার (বর্তমান সংস্থার ফাইলের মধ্যে) অনুমান করা রেখা নম্বর (একটি পূর্ণসংখ্যার ধ্রুবক)।
একটি সংখ্যার ধ্রুবক হিসাবে , কোডটি প্রায়শই মানটি ধরে নিতে পারে __LINE__ <= INT_MAX
এবং তাই টাইপটি int
।
সি মুদ্রণ করতে, printf()
ম্যাচিং সুনির্দিষ্টভাবে উল্লেখ করা দরকার: "%d"
। এটি সি ++ এর সাথে অনেক কম উদ্বেগ cout
।
পেডেন্টিক উদ্বেগ: যদি লাইন নম্বরটি INT_MAX
1 ছাড়িয়ে যায় (16-বিট দিয়ে কিছুটা অনুমেয় int
) তবে আশা করি সংকলকটি একটি সতর্কতা তৈরি করবে। উদাহরণ:
format '%d' expects argument of type 'int', but argument 2 has type 'long int' [-Wformat=]
বিকল্পভাবে, কোড বৃহত্তর ধরণেরকে এই ধরনের সতর্কতাগুলি ফরেস্ট করতে বাধ্য করতে পারে।
printf("Not logical value at line number %ld\n", (long) __LINE__);
//or
#include <stdint.h>
printf("Not logical value at line number %jd\n", INTMAX_C(__LINE__));
এড়াতে printf()
সমস্ত সংখ্যার সীমাবদ্ধতা এড়াতে: স্ট্রিংফাই করুন । কোডটি printf()
কল ছাড়াই সরাসরি মুদ্রণ করতে পারে : 2 টি পরিচালনা করার ক্ষেত্রে ত্রুটি এড়ানোর জন্য একটি দুর্দান্ত জিনিস ।
#define xstr(a) str(a)
#define str(a) #a
fprintf(stderr, "Not logical value at line number %s\n", xstr(__LINE__));
fputs("Not logical value at line number " xstr(__LINE__) "\n", stderr);
1 অবশ্যই এত বড় ফাইল থাকার জন্য দরিদ্র প্রোগ্রামিং অনুশীলন, তবুও সম্ভবত মেশিন দ্বারা উত্পন্ন কোডটি উচ্চতর হতে পারে।
2 ডিবাগিংয়ের ক্ষেত্রে, কখনও কখনও কোডটি আশানুরূপভাবে কাজ করে না। জটিল ক্রিয়াকলাপগুলিতে কল *printf()
করাতে ইস্যুগুলি বনাম একটি সাধারণ বিষয় হতে পারে fputs()
।