# অন্তর্ভুক্ত <iostream.h> খারাপ কেন?


47

আমি অন্য থ্রেডটি পড়ছিলাম যেখানে কোনও লোক নতুনদের জন্য সি ++ বই সম্পর্কে জিজ্ঞাসা করেছিল, এবং উত্তর দেওয়ার জন্য প্রোগ্রামারদের একজন এটি লিখেছিলেন:

কিছু সতর্কতা: "হ্যালো ওয়ার্ল্ড" উপস্থাপন করে এমন সমস্ত বই এড়িয়ে চলুন

#include <iostream.h>

আমি আমার সি ++ বইটি খুললাম এবং নিশ্চিত যে এটিতে উপরের উদাহরণের মতো আইস্ট্রিম হেডার অন্তর্ভুক্ত রয়েছে।

কেন খারাপ? সি ++ শিখার সময় আমার আর কোন পয়েন্টার মনে রাখা উচিত?

পটভূমি: আমি সি নিয়ে দক্ষ এবং আমি এই পরবর্তী সেমিস্টারে সি ++ শিখতে শুরু করব।


3
আরেকটি, সম্পর্কিত পয়েন্টারটি অন্তর্ভুক্ত করা উচিত cstdio, নয় stdio.h(পরেরটি অবচিত হয়)।
আন্তন গোলভ

7
@ অ্যান্টনগলভ মতামত পৃথক। <cddio> অগ্রাধিকার দেওয়ার কোনও প্রযুক্তিগত কারণ না থাকায় অনেক বিশেষজ্ঞ <stdio.h> পছন্দ করেন ।
Sjoerd

2
@ সুজার্ড যে <cstdio>নামগুলিতে নাম দেওয়ার গ্যারান্টিযুক্ত তা namespace stdআমার পক্ষে এটি পছন্দ করার পক্ষে যথেষ্ট কারণ। আমি জানি যে এটা হতে পারে এছাড়াও ঠিক যেমন বিশ্বব্যাপী নাম-স্পেস তাদের প্রদান <stdio.h> পারে তাদের প্রদান namespace std। এটি যদি সর্বদা <c…>হেডার ব্যবহার করার অভ্যাস করে তবে এটি ধারাবাহিকতার বিষয় । এবং কিছু শিরোনামের জন্য, আপনি সত্যিই এটি চাইবেন কারণ তারা অতিরিক্ত ফাংশন ওভারলোডগুলি সহ সি ইন্টারফেসকে বাড়িয়ে তোলে, উদাহরণস্বরূপ।
5gon12eder

উত্তর:


58

শিরোনাম iostream.h একটি মানহীন শিরোনাম এবং সমস্ত প্ল্যাটফর্মে উপস্থিত নেই। আসলে এটি আমার সিস্টেমে বিদ্যমান নেই (g ++ এবং GNU libstdc ++ ব্যবহার করে)। সুতরাং এটি ব্যবহার করে যে কোনও কোড কেবল আমার সিস্টেমে সংকলন করতে পারে না।

iostream.hহেডার সামনে সি ++ প্রথম 1998 সালে তাকে মানদণ্ডে পরিণত করে সাধারণ ব্যবহার করা হয় কিন্তু যেহেতু 98 মান ব্যবহৃত <iostream>পরিবর্তে <iostream.h>, আধুনিক (হচ্ছে অ-মানক এবং সব) পক্ষে বাইরে পতিত হয়েছে এবং আর সব প্ল্যাটফর্মে সমর্থিত। যে কোডটি এটি ব্যবহার করে তা মানহীন লিগ্যাসি কোড হিসাবে বিবেচনা করা উচিত এবং এটি পোর্টেবল নয়। যে বইগুলি এটি পড়ায় সেগুলি পুরানো এবং এড়ানো উচিত।


14
আমি কেবল একটি তুচ্ছ প্রিপ্রোসেসর সিনট্যাক্স সমস্যার কারণে কোনও বই সরাসরি এড়াতে পারি না। এটি একটি দুর্দান্ত বই হতে পারে যখন একটি ভয়ানক বই আধুনিক সিনট্যাক্স ব্যবহার করতে পারে।
লর্ড টাইডাস

21
@ লর্ড টিডাস যে-কোনও প্রদত্ত প্রাক -৯৯ বই একটি দুর্দান্ত বই হতে পারে তা এই পরিসংখ্যানগত দিক থেকে প্রত্যাখ্যান করে না যে, আপনি প্রাক -৯৯ পুস্তককে এড়িয়ে চলা ভাল।
মাইক নকিস

12
@ লর্ডটিডাস: সম্পূর্ণরূপে একমত নন। সি ++ এর স্টাইল এবং ব্যবহার 98 এর মতো নয় তবে এটি কেবল সিনট্যাকটিক সমস্যা সমাধান করা নয়।
মার্টিন ইয়র্ক

7
@ লর্ডটিডাস যদি পুরানো বাক্য গঠনটি সরল থাকে এবং কেবল আধুনিক সংকলকগুলিতে সহজভাবে সংকলন না করে তবে আপনার পুরাতন বাক্য গঠনটি শেখানো একটি বই ব্যবহার করতে আপনার খুব অসুবিধা হবে। নোট করুন যে কোনও বই যা iostream.h এর ব্যবহার শেখায় প্রায় নিশ্চিতভাবেই যেমন নেমস্পেসগুলি শেখায় না, তাই আইওস্ট্রিমে host প্রতিস্থাপনের পরেও, আপনার কোড কাজ করবে না। আপনার যদি গুগল করতে হয় বা প্রতিবার বই থেকে একটি উদাহরণ সংকলন করতে চাইলে এসও-তে সহায়তা চাইতে হয়, এটি সি ++ শেখার খুব কার্যকর উপায় নয়।
sepp2k

3
@ লর্ডটিডাস: সাধারণভাবে, আমি দেখতে পেয়েছি যে যে বইগুলিতে এই জাতীয় শিরোনাম ব্যবহার করা হয় সেগুলিও খারাপ অভ্যাস ব্যবহার করে এবং ত্রুটিগুলিতে ছাঁটাই থাকে। আমি এ জাতীয় বইগুলি কেবল প্রচলন থেকে দূরে রাখতে
গ্রেফ্যাড

55

#include <iostream.h>1998 সালে প্রথম সি ++ স্ট্যান্ডার্ডের আগে বইটি রচনা করা হয়েছিল এটি একটি চিহ্ন (মানক শিরোনামটি হ'ল iostream) is

সমস্যাটি হ'ল পুরানো সি ++ কোড এমনভাবে লেখা যায় যা আজকে খারাপ অভ্যাস হিসাবে বিবেচিত হয়। নির্দিষ্টভাবে,

  • সি-শৈলী অ্যারে বদলে মত ধারক ক্লাস ব্যবহার std::stringএবং std::vector
  • closeআরআইআইআই এর পরিবর্তে সুস্পষ্ট ফাংশনগুলির ব্যবহার ।

iostream.h১৯৯৯-এর পূর্বের বইটি ভুল হয়ে যাওয়ার সবচেয়ে খারাপ জিনিস নয় , তবে সম্ভবত 1998-এর পূর্বের বইটি ভুল হয়ে উঠবে এটিই প্রথম জিনিস।


14
আপনার চূড়ান্ত অনুচ্ছেদে এটি নীল করে দিয়েছে।
মনিকার সাথে হালকাতা রেস

1

ls /usr/{local/,}include/c++/*আপনার লেআউট এবং পাথ অনুসারে এটি কিছুটা দেরিতে আসে তবে একটি ইউনিক্স / লিনাক্স বাক্সে করা বা অনুরূপ, এটির জন্য মূল্য । আপনি grepপ্রশ্নে শিরোনামটি অনুসন্ধান করতে পাইপ করতে পারেন, যেমন:

ls /usr/{local/,}include/c++/* | grep iostream 

এটি iostream.hঅন্য যে কোনও সুপারস্ট্রিংয়ের জন্য নজর রাখে ।

অথবা চালান find / -type f -name iostream 2> /dev/null | grep includeবা locate iostream | grep include(প্রদত্ত ডেটাবেস বর্তমান, অন্যথায় একটি কল দিয়ে প্রিপেন্ড করুন updatedb) - এগুলি অবশ্য সিস্টেম-বিহীন প্রিন্টও প্রিন্ট করবে, সুতরাং দয়া করে যথাযথভাবে সামঞ্জস্য করুন। আসল সি ++ অন্তর্ভুক্ত পাথ সহজেই এরকম কিছু সহ পাওয়া যায়:

g++ -v 2>&1| sed -rn 's/.+gxx-include[^=]+=([^ ]+).+/\1/p' # adjust iff empty

সমানভাবে উইন্ডোজ এবং অন্যান্য মেশিনে। আমার ধারণা ধারণাটি পরিষ্কার - iostream.hএই সিস্টেমে যে ফাইল নেই তার মধ্যে ডিফল্টরূপে পাথ অন্তর্ভুক্ত নেই, তবে আপনি এখনও লিগ্যাসি ++ ডিস্ট্রিবিউশনগুলি iostream.hনরম-লিঙ্কযুক্ত iostreamবা এর অনুলিপি হিসাবে খুঁজে পেতে পারেন । সুতরাং এটি শৈলীর বিষয় নয় বরং পরিস্থিতিতে of আপনি iostream.hআপনার প্রকল্পের সাথে নিজের চালনা করতে পারেন কেবল এটির অন্তর্ভুক্ত পথে যেখানে আপনার সংকলক <...>শিরোলেখগুলি সন্ধান করছে তাতে এটি নিশ্চিত রয়েছে তা নিশ্চিত করুন।


1
খুব ব্যবহারিক কিন্তু সত্যিকারের মূল মৌলিক বিষয়টিকে সম্বোধন করে না।
মনিকার সাথে হালকাতা রেস

-1

শুধু আমার 2 সেন্ট ড্রপ। আমি মনে করি না যে ".h" এবং কোনও বইয়ের মানের মধ্যে কোনও সম্পর্ক রয়েছে। এটি একটি ছোটখাট সিনট্যাক্স সমস্যা। দিন ফিরে এটি আসলে সঠিক sytnax ছিল।

Iostream.h সহ একটি দুর্দান্ত বই পাওয়া কি সম্ভব? হ্যাঁ

আইওস্ট্রিমে কোনও ভয়ঙ্কর বই পাওয়া কি সম্ভব? হ্যাঁ

আমি কোনও বইয়ের মানের বিচার করার জন্য অনলাইন ব্যবহারকারী পর্যালোচনাগুলিতে (এবং পড়ার পরে আমার নিজস্ব পর্যালোচনা) উপর নির্ভর করব।


3
সমস্যাটি হল, আপনি কি "দিনের আগের দিন" থেকে কোনও বই চান তা নিশ্চিত?
hugomg

5
1958 সাল থেকে লিস্প কি পুরানো? আমরা পাইথাগোরাসের কাজকে প্রতিটি আধুনিক ক্ষেপণাস্ত্র ব্যবস্থায় ব্যবহার করি যদিও গণিতটি হাজার বছরের পুরানো। বর্তমান সি ++ বইয়ের বাজারে ".h" বইগুলি খুব ভয়ঙ্কর হতে পারে। তবে এটি বইয়ের ইস্যুর একটি গুণমান, "" এইচ "ইস্যু নয়। "। এইচ" এমনকি প্রোগ্রামিং যুক্তিও নয়, এটি প্রিপ্রোসেসরের জন্য।
লর্ড টাইডাস

4
কিন্তু প্রথমবারের মতো ভাষা শেখা কেউ কি জানবেন বইটি যখন তাদের কোনও ভুল বলছে? ".এইচ" এখন ভুল আছে তা খুঁজে পাওয়ার আগে তারা কত সময় এবং হতাশার মধ্য দিয়ে যাবে? আর কত অন্যান্য উপায়ে বইটির মেয়াদ শেষ?
ক্রিস পিটম্যান

23
সমস্যাটি হ'ল সেই বইগুলি লেখার পর থেকেই সি ++ এর ব্যবহার উল্লেখযোগ্যভাবে পরিবর্তিত হয়েছে। আপনি যেভাবে পুরোপুরি সি ++ ভাবেন এবং ব্যবহার করেন সেগুলি সেই বইগুলি যেমন উপস্থাপন করবে তেমনি আধুনিক সি ++ এর কোনও সুবিধাগুলি নেই present ফলস্বরূপ আপনি নিজেকে সি ++ না দিয়ে ক্লাস দিয়ে সি পড়িয়ে যাবেন।
মার্টিন ইয়র্ক

3
@ জর্জিও: বিরক্তিকর এসিআর সম্পর্কে কী। ব্যতিক্রম সহ রিতালিনে অ্যাডভান্সড সি। একর এটিকে বোঝায় যে এটি প্রচুর জমি coversেকে দেয়। :-)
মার্টিন ইয়র্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.