سؤال

كيف يمكنك تمرير خيارات للتنفيذ ؟ هل هناك طريقة أسهل من اتخاذ خيارات منطقية الحجج ؟

تحرير:آخر اثنين من الإجابات قد اقترح استخدام الحجج.وأنا أعلم أنني يمكن أن رمز حل عملي مثل هذا, ولكن أنا أفضل أن يكون لهم أن الخيارات.

EDIT2:في طلبات التوضيح ، سوف تستخدم هذا المثال البسيط:من السهل إلى حد ما التعامل مع الحجج لأنها تلقائيا على تحليل في صفيف.

./printfile file.txt 1000

إذا كنت تريد أن تعرف ما اسم الملف الذي يريد المستخدم طباعة كنت الوصول إليه عبر argv[1].

الآن حول كيفية هذا الوضع:

./printfile file.txt 1000 --nolinebreaks

يريد المستخدم طباعة الملف بدون فواصل الأسطر.هذا لا يلزم أن يكون البرنامج قادرا على تشغيل (اسم الملف و عدد من خطوط الطباعة) ، ولكن المستخدم لديه خيار استخدام إذا ق/انه يرغب.الآن أنا يمكن أن تفعل هذا باستخدام:

./printfile file.txt 1000 true

استخدام موجه بإبلاغ المستخدم أن الحجة الثالثة يستخدم لتحديد ما إذا كنت تريد طباعة الملف مع خط فواصل أو لا.ومع ذلك ، يبدو هذا بدلا الخرقاء.

هل كانت مفيدة؟

المحلول

يبدو أنك تعتقد أن هناك بعض الفرق الأساسي بين "الخيارات" التي تبدأ مع "--"و "الحجج" التي لا.الفرق الوحيد هو في كيفية تحليل لهم.

قد يكون من المفيد في الوقت الخاص بك تبدو في غنو getopt()/getopt_long() الخيار محلل.وهو يدعم تمرير الوسائط مع خيارات مثل --number-of-line-breaks 47.

نصائح أخرى

وسيطات سطر الأوامر هو الطريق للذهاب.قد ترغب في النظر في استخدام دفعة.ProgramOptions إلى تبسيط هذه المهمة.

انا استخدم طريقتين لنقل المعلومات:

1/ استخدام وسيطات سطر الأوامر التي هي أسهل للتعامل مع محددة المكتبات مثل getargs.

2/ كما متغيرات البيئة ، وذلك باستخدام getenv.

شخص لديه فكرة الحق هنا.

إذا كنت في حاجة أكثر دقة في اتجاهين ، فتح العملية مع أنابيب ارسل إلى المدخل/الاستماع على stdout.

يمكنك أيضا استخدام نافذة PostMessage() وظيفة.هذا مفيد جدا إذا كان الملف القابل للتنفيذ الذي تريد إرسال الخيارات قيد التشغيل بالفعل.لا أستطيع الرد على بعض رمز المثال إذا كنت مهتما في هذه التقنية.

السؤال ليس بتوهج واضحة على السياق فقط ما كنت تحاول القيام به - تعني تشغيل قابل للتنفيذ من خلال C++ البرنامج ؟ هناك العديد من المعايير C وظائف المكتبة مع أسماء مثل execl(), execv(), execve(), ...التي تأخذ خيارات سلاسل أو مؤشر إلى مجموعة من السلاسل.هناك أيضا نظام() الذي يأخذ سلسلة تحتوي أيا كان قد تكون الكتابة في باش موجه والخيارات كافة.

أنا أحب popt المكتبة.فمن C ، ولكن يعمل بشكل جيد من C++ كذلك.

فإنه لا يبدو أن يكون عبر منصة على الرغم من.لقد اكتشفت ذلك عندما كنت قد الإختراق خارج بلدي API-متوافق مع إصدار من Windows ميناء بعض برامج لينكس.

يمكنك وضع خيارات في .ini و استخدام GetPrivateProfileXXX API إلى إنشاء فئة يمكن قراءة نوع من خيارات البرنامج كنت تبحث عن من .ini.

يمكنك أيضا إنشاء تفاعلية قذيفة على التطبيق الخاص بك إلى تغيير بعض الإعدادات في الوقت الحقيقي.

تحرير:من التعديلات الخاصة بك, لا يمكنك تحليل كل خيار تبحث عن الكلمات الأساسية الخاصة المرتبطة بهذا الخيار التي هي "اختياري"?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top