মুদ্রণ ব্যবহার / সহায়তা (- সহায়তা) জন্য সেরা অনুশীলন হিসাবে বিবেচনা করা হয়?


13

ইউনিক্সের সিএলআইয়ের জন্য সরঞ্জাম লেখার সময়, আমি কীভাবে প্রোগ্রামটিকে মুদ্রণ সাহায্য এবং / অথবা ব্যবহার করতে পারি?

আমি সাধারণত ব্যবহার করি fprintf(stderr, "help text here");তবে এটি নিয়ে বেশ কয়েকটি সমস্যা রয়েছে।

  • প্রথমত, আমি নিশ্চিত না, আমার ব্যবহার করা উচিত কিনা stderr। এটা ঠিক আছে, বা আমার ব্যবহার করা উচিত stdout?
  • আপনি যেমন কল্পনা করতে পারেন, সরঞ্জামটির কতগুলি বিকল্প রয়েছে তার উপর নির্ভর করে সহায়তা পাঠ্যটি বেশ দীর্ঘ। এখন, আমি সাধারণত, "strings like that\n"দ্বিতীয় প্যারামিটারে বেশ কয়েকটি রেখেছি । এটি যাইহোক, সাহায্যের পাঠ্যের পঞ্চাশ বা ততোধিক লাইন দিয়ে আমার উত্স কোডটি পূরণ করে। এটি মোটেই সহজ পরিচালনা করা যায় না। পরিবর্তে আমার কী করা উচিত?
  • যখন কোনও সরঞ্জাম সি বা সি-জাতীয় ভাষায় লেখা না হয়, আমি এখানে ডকগুলি যেখানে সম্ভব সেখানে ব্যবহার করার প্রবণতা করি (সর্বাধিক সুস্পষ্টভাবে পার্ল সহ)) আমি সি তে এটি ব্যবহার করতে পারি না, তবে আমি ব্যবহার করতে পারি এমন কি কিছু আছে?
  • আমি এটিকে একটি headerfile.hঅভ্যন্তরে রাখার কথা #define HELP "help text here"ভাবছিলাম, আমি এটি বুনোতে কখনও দেখিনি, আমার আসলে এটি ব্যবহার করা উচিত কিনা তা জানি না।

আদর্শভাবে, আমি টেক্সটটি একটি বাহ্যিক ফাইলে রাখতে পারি এবং এটি অন্তর্ভুক্ত করতে পারি। #includeযদিও এটির জন্য ব্যবহার করা ভুল বলে মনে হচ্ছে। আমার তখন কি করা উচিত?

ধারণাটি হ'ল একটি সহায়তা পাঠ্য থাকা সহজ, এটি সহজেই পরিচালনাযোগ্য। উত্স কোড এর ভিতরে থাকা সত্যই সুবিধাজনক নয়।


1
আপনার উত্স কোডে 50 টি লাইন সম্পর্কে এত খারাপ কী? শুধু এটি শেষে রাখুন। এটির মতো নয় যে আপনি নিয়মিত এটির সাথে ঝামেলা করতে চলেছেন।
whatsisname

2
@Whatisname ব্যবহার, সাধারণ এবং দীর্ঘস্থায়ীদের জন্য সহায়তা। আমি সোসকোডে প্রায় 200 লাইনের স্ট্রিং রেখেছি। এগুলি বাদ দিয়ে, আমি কেবল এটি সর্বোত্তম অনুশীলন বলে মনে করি না, ইত্যাদি হেল্প টেক্সট ইত্যাদির আরও কার্যকর উপায় থাকতে হবে
পোলেমন

উত্তর:


8

আপনার লক্ষ্য প্ল্যাটফর্মের অভ্যন্তরীণ থেকে নিজেকে অনুপ্রাণিত করুন

বিএসডির উত্স কোডটি দেখুন। উদাহরণস্বরূপ, এখানে:

  • usage(void)নেটবিএসডি-র /usr/bin/unameসরঞ্জাম [ উত্স ] এর জন্য:

    usage(void)
    {
        fprintf(stderr, "usage: uname [-amnprsv]\n");
        exit(EXIT_FAILURE);
    }
    
  • usage(void)নেটবিএসডি এর /usr/bin/telnet[ উত্স ]

  • usage(void)ওপেনবিএসডি এর /bin/ls[ উত্স ]

বিকল্পগুলি দেখুন

সেগুলি আরও ভাল বা আরও খারাপ সে বিষয়ে নিজেরাই সিদ্ধান্ত নিন। আপনি অন্যদের খুঁজতে গুগল কোডস অনুসন্ধান ব্যবহার করতে পারেন, যেমন:

  • স্কাইলডের ব্যবহার [ উত্স ]

আপনি দেখতে পাচ্ছেন, উপরের তালিকাভুক্ত বিএসডি সিস্টেমগুলির সমন্বিত সরঞ্জামগুলির মধ্যে এইগুলির মধ্যে বিভিন্ন স্টাইল। এর মানে এই না যে আপনি আছে এক বা অন্যান্য অনুসরণ করুন। তবে সাধারণত চারপাশে নজর দেওয়া ভাল, এবং ধারাবাহিক সমাধানের জন্য স্থির করে নিন।

50 টি লাইনের সহায়তার একটি মানহীন সমাধান ...

আপনি যদি 50 টি লাইনের পাঠ্য এড়াতে পছন্দ না করেন তবে আপনি কেবল একটি পাঠ্য ফাইল থেকে সহায়তাটি পড়তে পারেন (সরল পাঠ্যে, অথবা manআপনি যদি এটি তৈরি করেন তবে সরাসরি উত্সটির সরাসরি পার্স করতে পারেন)। আমি দেখতে পেলাম যে একটি মূল মার্জিত উপায় (যেমন আপনি এমনকি পাঠ্য ডকটি সন্ধান করতে পারেন) তবে মূল সিস্টেম প্রোগ্রামগুলির জন্য যা তাদের অন্তর্নিহিতভাবে অনিরাপদ করে তোলে এবং ব্যর্থতার একটি বিন্দু প্রবর্তন করে। অন্যান্য লোকেরা এটি usageবা একটি helpবার্তার জন্য ভারী তর্ক করবে , তবে এটি দ্রুত টাইট লুপগুলিতে বলা হয় এমন নয় ...

সন্দেহ হলে, দৈত্যগুলি অনুসরণ করুন।


9

আমি ব্যবহার করি stdoutকারণ একটি সহায়তা ত্রুটি নয়।

যদি এটি সি তে দীর্ঘ সাহায্য হয় তবে আমি এখানে ডক্স নকল করার চেষ্টা করি:

printf("This is the help for MyWonderfulApp\n"
       "Options are:\n"
       "    --help: display what you are reading now\n"
       "    --quiet: output nothing\n");

তবে বেশিরভাগ সময় আমি ডেডিকেটেড ট্যাগ manব্যবহার করে একটি পৃষ্ঠা লিখি nroff -man। অ্যাপ্লিকেশন সহায়তাটি কেবল সেই manপৃষ্ঠাটি উল্লেখ করার জন্য অন্তর্ভুক্ত।


কিন্তু সাহায্যের প্রয়োজন অগত্যা স্ট্যান্ডার্ড আউটপুট, তাই না? কীভাবে stdlog?
গ্রেফ্যাড

@ গ্রেফ্যাড: stdlogস্ট্যান্ডার্ড সি?
mouviciel

@ মউভিচিয়েল: ... আমি ভেবেছিলাম আমি মনে করি না. সি ++ একটি সম্পর্কিত মান স্ট্রিম আছে ( cin, cout, cerr, এবং clog), তাই আমি আমি ভেবেছিলাম অনুমান stdlogসি মান ছিল। আমার খারাপ।
গ্রেফ্যাড

2

আমি যদি তোমার হতে চাই আমি শুধু উৎস খোলা চাই grep, tail, cat, your_other_favorite_unix_shell_commandদেখতে কিভাবে এটি সেখানে সম্পন্ন। আমি নিশ্চিত যে তাদের উপায়গুলি বেশ ভালভাবে চিন্তা করা হয়েছে এবং অনেক লোক এটি বজায় রাখতে পারে।

সম্পর্কে stderrবা stdout। এটি সত্যিই সহজ, যদি কোনও ত্রুটি থাকে - তবে লিখুন stderr, এটি কেবল তথ্য - stdout। উদাহরণস্বরূপ, যদি আমি আপনার সরঞ্জামটি ভুল বিকল্পগুলি দিয়ে চালিত করি তবে আপনি একটি ত্রুটি প্রদর্শন করতে চাইতে পারেন, বলুন Use --help for usageএটি এইটির অন্তর্ভুক্ত stderr। আমি যদি কোনও বৈধ বিকল্প দিয়ে আপনার সরঞ্জামটি চালনা করি --helpতবে দয়া করে ব্যবহার করুন stdout

যদি আপনার কোডের কাছে দীর্ঘ সাহায্যের স্ট্রিং না রাখাই আপনার পছন্দ হয় তবে তা করবেন না। একটি শিরোলেখ ফাইলটিতে # সংজ্ঞাটি পুরোপুরি ঠিক আছে, তবে এটি সত্যই ব্যক্তিগত পছন্দ। যদি আমাকে কোনও কমান্ড লাইন সরঞ্জামের কোডটি পড়তে হয় তবে আমি তার সহায়তা স্ট্রিংটিকে এমন কোনও ফাইলের মধ্যে থাকতে পছন্দ করব যা ব্যবহারকারীর দ্বারা সরবরাহিত বিকল্পগুলি পরিচালনা করে।


2
এটি তার প্রশ্নের উত্তর দেয় না।
মাভ্রিক

এইচ এম, বিয়োগ-ইনিংয়ের সাথে কী হচ্ছে? কিসের জন্য?
devmiles.com

@ মাভ্রিক: প্রথম অনুচ্ছেদটি করে।
হাইলেম

1

আমি gnu getopts লাইব্রেরি ব্যবহার করি । সহায়তার সাথে উদাহরণের জন্য, এই নমুনা প্রকল্পটি দেখুন , বিশেষত পার্সার.ইয়ের নীচে মূল পদ্ধতি ।

যেহেতু এটি কোঁকড়ানো ধনুর্বন্ধনী মধ্যে আবৃত হয়, আমি যে ভিম সম্পাদক ব্যবহার করি তা লাইনগুলি একসাথে ভাঁজ করতে পারে এবং যখন আমার প্রয়োজন হয় না তখন আমি সেগুলিও লক্ষ্য করি না।


1

আমি যদি সি ব্যবহার করি বা বুস্ট লাইব্রেরিগুলির উপর নির্ভর না করা পছন্দ করি তবে আমি জিএনইউতে আঁকড়ে থাকি getopt। অন্যথায় আমি বুস্ট প্রোগ্রাম বিকল্পগুলি পছন্দ করি যা প্রিন্ট করে স্বয়ংক্রিয়ভাবে সহায়তা করে।

অপশনগুলি হ্যান্ডলিংয়ের ক্ষেত্রে আমি সঠিক বিকল্পটি অনুশীলনের অন্যতম সেরা অনুশীলন বিবেচনা করি। আমি এটি গিটের কাছ থেকে শিখেছি এবং এখন আমার প্রকল্পগুলিতে এটি ব্যবহার করি। এটি ব্যবহারকারীরা কিছু অজানা কমান্ড লাইন বিকল্পে প্রবেশ করে সেরা মিলগুলি প্রিন্ট করতে মূলত ডামেরাউ – লেভেনস্টাইন দূরত্ব ব্যবহার করে।

আমি এই সম্পর্কে একটি সামান্য নিবন্ধ লিখেছিলেন যে আপনি উদাহরণ হিসাবে ব্যবহার করতে পারেন।

আশা করি এটা সাহায্য করবে :)


1

স্পষ্টতই, কাউট << বা প্রিন্টফ () কোডে একটি গর্ত পৃষ্ঠা লেখা জটিল, বিশেষত আপনার যদি আপনার অনুচ্ছেদগুলি পরিবর্তন এবং পুনরায় পূরণ করা প্রয়োজন। সুতরাং, পৃথক ফাইলে সেই পাঠ্যটি সম্পাদনা করা স্পষ্টতই ভাল ধারণা, উদাহরণস্বরূপ ইম্যাক্স ব্যবহার করে যেখানে আপনি আরও সহজেই আপনার পাঠ্যকে ফর্ম্যাট করতে পারেন।

তারপরে আপনি সেই টেক্সট ফাইলটিকে আইনী সি হেডার ফাইলে রূপান্তর করতে নীচের এসডি স্ক্রিপ্টটি ব্যবহার করতে পারেন :

s/\"/\\\"/g
s/$/\\n"/
s/^/"/
1i\
const char *helpStr = 
$a\
;

তারপরে, আপনার উত্স কোডটিতে আপনার শিরোলেখ ফাইলটি অন্তর্ভুক্ত করার পরে, আপনি সহজেই ব্যবহার করে আপনার পাঠ্যটি লিখতে পারেন

cout << helpStr;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.