যে কোনও পার্শ্ব-উদ্বেগকে আচ্ছাদিত করে অন্যান্য সুস্পষ্ট বর্ণিত উত্তরগুলির পাশাপাশি, আমি প্রদত্ত প্রশ্নের একটি সুনির্দিষ্ট এবং সংক্ষিপ্ত উত্তর দিতে চাই।
কেন printf
একটি একক যুক্তি দিয়ে (রূপান্তর নির্দিষ্টকরণ ছাড়াই) অবহেলা করা হচ্ছে?
একজন printf
সাধারণ একটি একক আর্গুমেন্ট সহ ফাংশন কল করা হয় না অবচিত এবং কোন দুর্বলতা আছে যখন সঠিকভাবে ব্যবহৃত হিসাবে আপনি সবসময় কোড হইবে।
সি ব্যবহারকারীগণ, পুরো বিশ্বের মধ্যে, স্ট্যাটাস শুরুর থেকে শুরু করে স্ট্যাটাস বিশেষজ্ঞ printf
পর্যন্ত কনসোলকে আউটপুট হিসাবে একটি সাধারণ পাঠ্য বাক্যাংশ দেওয়ার জন্য সেই উপায়টি ব্যবহার করে।
তদ্ব্যতীত, কাউকে আলাদা করতে হবে যে এটির একমাত্র যুক্তিটি একটি স্ট্রিং আক্ষরিক বা কোনও স্ট্রিংয়ের পয়েন্টার, যা বৈধ তবে সাধারণভাবে ব্যবহৃত হয় না। পরবর্তীকালের জন্য অবশ্যই অসুবিধাগুলি আউটপুট বা যে কোনও ধরণের অপরিজ্ঞাত আচরণ হতে পারে , যখন পয়েন্টারটি একটি কার্যকর স্ট্রিংয়ের দিকে নির্দেশ করতে সঠিকভাবে সেট না করা থাকে তবে ফর্ম্যাট স্পেসিফায়ারগণ প্রদত্ত যুক্তিগুলির সাথে মেলে না তবে এই জিনিসগুলিও ঘটতে পারে একাধিক যুক্তি।
অবশ্যই, এটিও সঠিক এবং যথাযথ নয় যে স্ট্রিংয়ের একমাত্র এবং কেবল যুক্তি হিসাবে সরবরাহ করা কোনও ফর্ম্যাট বা রূপান্তর নির্দিষ্টকরণকারী রয়েছে, যেহেতু কোনও রূপান্তর ঘটবে না।
এটি বলেছিল "Hello World!"
যে স্ট্রিংটির ভিতরে কোনও বিন্যাসের নির্দিষ্টকরণ ছাড়াই কেবল যুক্তি হিসাবে একটি সাধারণ স্ট্রিংকে আক্ষরিক দেওয়া আপনার প্রশ্নের মতো করে দেওয়া হয়েছে:
printf("Hello World!");
হয় না অবচিত অথবা " খারাপ অভ্যাস " এ সব কিংবা কোনো দুর্বলতা আছে।
প্রকৃতপক্ষে, অনেক সি প্রোগ্রামাররা হ্যালো ওয়ার্ল্ড-প্রোগ্রাম এবং এই printf
ধরণের প্রথম বিবরণ হিসাবে সাধারণভাবে সি বা এমনকি প্রোগ্রামিং ভাষাগুলি শিখতে এবং ব্যবহার করতে শুরু করে ।
তারা যদি হতাশ হয় তবে তা হবে না।
যে বইটিতে আমি পড়ছি, তাতে লেখা আছে যে printf
একটি একক যুক্তি দিয়ে (রূপান্তরকারী নির্দিষ্টকরণ ছাড়াই) হ্রাস করা হয়েছে।
ঠিক আছে, তাহলে আমি বইটি বা লেখক নিজেই মনোযোগ দেব। যদি কোনও লেখক সত্যিই এমনটি করে থাকেন, আমার মতে, ভুল জোর দেওয়া এবং এমনকি শেখানোও যে তিনি কেন সে করছেন তা স্পষ্টভাবে ব্যাখ্যা না করে (যদি সেই দাবিগুলি সত্যই সেই বইটিতে আক্ষরিক অর্থে সমতুল্য হয়) তবে আমি এটিকে একটি খারাপ বই হিসাবে বিবেচনা করব । এর বিপরীতে একটি ভাল বইটি নির্দিষ্ট ধরণের প্রোগ্রামিং পদ্ধতি বা ক্রিয়াকলাপগুলি কেন এড়াতে হবে তা ব্যাখ্যা করবে ।
আমি উপরে যা বলেছি তার অনুসারে printf
কেবলমাত্র একটি যুক্তি (একটি স্ট্রিং আক্ষরিক) দিয়ে এবং কোনও বিন্যাসের নির্দিষ্টকরণ ছাড়াই ব্যবহার কোনও ক্ষেত্রেই অবহিত বা "খারাপ অনুশীলন" হিসাবে বিবেচিত নয় ।
আপনার লেখককে জিজ্ঞাসা করা উচিত, তিনি এর অর্থ কী বা তার চেয়েও ভাল, তার পরবর্তী সংস্করণ বা সাধারণভাবে ছাপগুলির জন্য আপেক্ষিক বিভাগটি স্পষ্ট করে বা সংশোধন করার জন্য মনে করুন।
printf("Hello World!")
হয় না হিসাবে একইputs("Hello World!")
।puts()
সংযোজন ক'\n'
। পরিবর্তেprintf("abc")
fputs("abc", stdout)