سؤال

ما هي الأشياء التي يجب أن تبقى أكثر في الاعتبار عند كتابة التطبيقات عبر منصة في C ؟ استهداف الأنظمة الأساسية:32-bit Intel القائمة على PC و Mac و Linux.أنا لا سيما تبحث عن نوع من براعة تلك الغابة القرص في سطح المكتب USB edition ( http://www.jungledisk.com/desktop/download.aspx )

ما هي النصائح "gotchas" لهذا النوع من التنمية ؟

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

المحلول

أنا حافظت على عدد من السنوات ANSI C الشبكات المكتبة التي تم تصديرها إلى ما يقرب من 30 نظام التشغيل و المجمعين.المكتبة لم يكن لديك أي مكونات واجهة المستخدم الرسومية, مما جعل الأمر أسهل.لقد انتهى الأمر التلخيص إلى مخصص الملفات المصدر أي الروتينية التي لا تتفق عبر المنابر ، وتستخدم #تحدد عند الاقتضاء في تلك الملفات المصدر.هذه تبقى التعليمات البرمجية التي تم تعديلها في منصة معزولة بعيدا من منطق الأعمال من المكتبة.نحن أيضا جعل استخدام واسع النطاق من typedefs و لدينا أنواع مخصصة الخاصة بحيث يمكن بسهولة تغييرها في منصة إذا لزم الأمر.جعل هذا الميناء على الأنظمة الأساسية 64-بت من السهل إلى حد ما.

إذا كنت تبحث مكونات واجهة المستخدم الرسومية, أود أن أقترح النظر في واجهة المستخدم الرسومية أدوات مثل WxWindows أو كيو تي (التي هي على حد سواء C++ المكتبات).

نصائح أخرى

في محاولة لتجنب تعتمد على منصة #ifdefs, كما أنها تميل إلى أن تنمو باطراد عند إضافة برامج جديدة.بدلا من ذلك, حاول أن تنظيم الملفات المصدر مثل شجرة مع منصة مستقلة رمز في الجذر ، و التي تعتمد على منصة رمز على "أوراق".هناك كتاب لطيف حول هذا الموضوع ، منصة متعددة إدارة رمز.نموذج التعليمة البرمجية في أنها قد تبدو عفا عليها الزمن, لكن الأفكار وصفها في كتاب لا تزال ببراعة الحيوية.

كذلك كايل الإجابة أود أن أوصى بشدة ضد محاولة استخدام النظام الفرعي Posix في ويندوز.انها تنفذ إلى المطلق أدنى مستوى هذه أن مايكروسوفت يمكن أن يدعي "Posix الدعم" على ميزة ورقة مربع.ربما هناك شخص ما يستخدم في الواقع ، ولكن لم يسبق أن واجهتها في الحياة الحقيقية.

يمكن للمرء أن يكتب عبر منصة التعليمات البرمجية C, عليك أن تكون على بينة من الاختلافات بين المنابر, اختبار, اختبار, اختبار.وحدة الاختبارات و CI (التكامل المستمر) الحل سوف تذهب شوطا طويلا نحو جعل متأكد من أن البرنامج يعمل في جميع الأنظمة الأساسية الهدف.

هو نهج جيد لعزل النظام تعتمد على الاشياء في واحد أو عدد قليل من وحدات على الأكثر.توفير نظام مستقل واجهة من أن وحدة.ثم بناء كل شيء على أعلى من تلك الوحدة ، لذلك لا تعتمد على نظام أنت تجميع.

حاول أن تكتب بقدر ما تستطيع مع POSIX.ماك و لينكس دعم POSIX أصلا ويندوز يحتوي على نظام تشغيل (بقدر ما أعرف - أنا فعلا لم تستخدم).إذا كان التطبيق الخاص بك هو الرسومية, كل من ماك و لينكس دعم X11 المكتبات (لينكس أصلا ، ماك من خلال X11.التطبيق) و هناك العديد من الطرق للحصول على X11 تطبيقات تعمل على نظام ويندوز.

ومع ذلك ، إذا كنت تبحث عن الحقيقية منصة متعددة النشر ، ربما يجب عليك التبديل إلى لغة مثل جافا أو الثعبان قادر على تشغيل البرنامج على أنظمة متعددة مع القليل أو أي تغيير.

تحرير:لقد قمت بتحميل التطبيق و بحثت في الملفات.فإنه لا يبدو أن الثنائيات كل 3 منصات في دليل واحد.إذا كان اهتمامك هو في كيفية كتابة التطبيقات التي يمكن نقلها من جهاز لآخر دون فقدان إعدادات, ربما يجب عليك كتابة جميع التكوين الخاص بك إلى ملف في نفس الدليل كملف قابل للتنفيذ و لا تلمس Windows أو إنشاء أي نقطة الدلائل في مجلد المنزل للمستخدم أن يعمل البرنامج على لينكس أو ماك.وبقدر ما خلق عبر توزيع لينكس الثنائية ، 32 بت POSIX/X11 ربما يكون الرهان الأكثر أمانا.لست متأكدا ما JungleDisk يستخدم كما أنا حاليا على ماك.

وجود عدد قليل من المكتبات المحمولة فقط أمثلة لقد عملت في الماضي

1) سطحي و gtk+

2) libcurl

3) libapr

تلك التي تغطي تقريبا كل منصة لذلك هم متردده أداة مفيدة.

Posix بخير على Unices لكن أشك انها كبيرة على ويندوز ، بالإضافة إلى أننا لم يكن لديك أي الأشياء المحمولة واجهات هناك.

XVT يكون عبر منصة واجهة المستخدم الرسومية C API التي ناضجة 15+ سنوات يجلس على رأس الأم النوافذ toollkits. انظر WWW.XVT.COM.

أنها تدعم على الأقل لينكس, ويندوز, ماك.

أنا أيضا الثانية التوصية رمز منفصل على منصات مختلفة في وحدات مختلفة/الأشجار بدلا من ifdefs.

كما أوصي التحقق مسبقا ما هي الاختلافات في منصات كيف يمكن مجردة منها.E. g.هذا هو بعض OS الاشياء ذات الصلة (على سبيل المثالمزعج CR,CRLF لو في ملفات نصية) أو الأجهزة الأشياء.E. g.السابق ذكرها posix compability لا يمنعك من

int c;
fread(&c, sizeof(int), 1, file);

ولكن على مختلف منصات الأجهزة الذاكرة الداخلية تخطيط يمكن أن تكون مختلفة كاملة (endianess) ، يجبرك على استخدام وظائف تحويل على بعض الأنظمة الأساسية الهدف.

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