• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

Khaled Alshaya

المشرفون
  • عدد المشاركات

    2,052
  • تاريخ الانضمام

  • تاريخ اخر زياره

كل شيء نشر بواسطة Khaled Alshaya

  1. لا يوجد فرق, اللهم إلا أن الناس اعتادت على تسمية Compiler للترجمة من اللغات العالية المستوى إلى اللغات الدنيا. بينما translator هو كلمة عامة. في النهاية الـ Compiler عبارة عن Translator.
  2. بصراحة رأي شخصي لا فائدة من هذه الأدوات الغبية لأنها في النهاية ستنتج كوداً سيئاً و لن تستغل نقاط قوة كل لغة و لن تتفادى سلبياتها. ببساطة الترجمة الميكانيكية لن تنتج لك كود سريع في ++C و لا expressive كود في JS و هكذا!
  3. القيمه المعاده من الدوال

    أخي محمد, في مثالك الكود صحيح لأنك تقوم بإسناد كائن مؤقت حياته لا تنتهي بمجرد الخروج من الدالة, بينما إذا أعادت أي من الدالتين مرجعاً لنص فإن الكود يندرج تحت الـ undefined behavior. لاحظ أننا نتكلم عن هذا الأمر فقط في حالة المراجع الـ const بينما إذا كان الطرف الأيسر بالطبع مرجعاً فقط و ليس مرجعاً ثابتاً فهذا لا يجوز أيضاً.
  4. عزيزي هناك طريقتان لفعل أي شيء إما أن تستخدم عجلة جاهزة أو أن تعيد اختراع العجلة :) أنا أختار استخدام Boost.Program_options و هي مكتبة رائعة بحق, و تمكنك من التعامل مع الـ Command Line و الـ Config Files و Environment Variables بكل سهولة, فقط اشرح لها ما تريد!!! بالمناسبة بحثت في Boost عن مكتبة تفعل ما تريده بعد قراءة سؤالك و لم يسبق لي التجربة من قبل و خرجت بالمثال التالي الذي قمت بكتابته في 10 دقائق لذلك سنركز على الـ Command Line فقط. أولاً خذ المثال التالي و جربه: #include <iostream> #include <string> #include <boost/program_options.hpp> namespace po = boost::program_options; int main(int argc, char* argv[]) { po::options_description scheme("command line options"); scheme.add_options() ("help", "print the command line options help page") ("first_name", po::value<std::string>(), "set first name") ("last_name", po::value<std::string>(), "set last name") ("age", po::value<int>(), "set age"); po::variables_map options; po::store(po::parse_command_line(argc, argv, scheme), options); po::notify(options); if(options.count("help")) { std::cout << scheme; return 0; } std::cout << "first_name: "; if(options.count("first_name")) std::cout << options["first_name"].as<std::string>(); else std::cout << "[first name wasn't specified]"; std::cout << std::endl; std::cout << "last_name: "; if(options.count("last_name")) std::cout << options["last_name"].as<std::string>(); else std::cout << "[last name wasn't specified]"; std::cout << std::endl; std::cout << "age: "; if(options.count("age")) std::cout << options["age"].as<int>(); else std::cout << "[age wasn't specified]"; } هذه تجاربي مع الكود: يمكننا أن نتشارك في فهم الكود إن كانت Boost توافق رغباتك, رغم أن قراءة سريعة للوثائق كافية لتعلم أساسيات المكتبة. تحياتي...
  5. القيمه المعاده من الدوال

    أخي mental-driller, ما دام أنك تحاول إسناد متغير انتهت حياته إلى مرجع فما تقوم به غير صحيح. اللغة تحميك من الوقوع في المحظور من خلال منع إسناد القيمة العائدة من الدالة إلى مرجع إذا كانت تلك القيمة A مثلاً. أما إن كان النوع العائد عبارة عن مرجع &A ففي تلك الحالة أنت المسؤول عن ضمان الصلاحية. بمعنى أنك في الحالة التي تقول أن كودك صحيح أعدت مرجعاً لكائن قد انتهت حياته أصلاً بمجرد الخروج من الدالة. اللغة تسمح بفعل هذا الشيء رغم أن هذه الحالة خاطئة, لأنك قد تعيد أحد أعضاء الكائن و متغيرات الكائن(كالعدد الصحيح في مثالك) لا تنتهي بمجرد الخروج من الدالة و إنما بانتهاء حياة الكائن نفسه. عذراً أخي علي لم أفهم نقطتك, هل من الممكن أن توضح أكثر؟
  6. إستخدام UTF-8 داخل ++C

    بالطبع يمكنك بناء string class تتعامل مع أي ترميز تريده و معظم الـ frameworks الشهيرة تأتي بكائن نص يستعمل ترميز معين و لكن أعتقد أنك تقصد الـ utf-8 literal هذا غير موجود, و لكن في Cpp0x هناك literals لجميع أنواع الترميزات و يمكنك بناء أي literal تريده في الحقيقة :)
  7. القيمه المعاده من الدوال

    السلام عليكم.... يا جماعة الخير ربما أخطأت الفهم و لكن: في الحالتين لا يمكن الإسناد إلى reference, لسبب بسيط هو أن المتغيرين تنتهي حياتهما بمجرد الخروج من الـ scope, و بالتالي فكل ما لديك عبارة عن dangling reference لمكان لا معنى له في الذاكرة. عموماً, لا يمكن أصلاً إسناد متغير مؤقت إلى مرجع و لكن هذا ممكن في حالة المؤشرات و لكنه خاطئ أصلاً. هذا أصبح ممكناً مع الـ RValue Reference في المقاييس الجديدة و لكن لا يتم استخدام الـ rvalue reference بشكل مباشر في الغالب.
  8. time كيف يحسب الوقت

    هنا يأتي دور الـ precision التي تدعمها المنصة في العتاد و نظام التشغيل. بمعنى أنه صحيح أنك تقوم بقراءة عدد الـ ticks التي تخطاها البرنامج, إلا أنه في الحقيقة لايحدث هذا الـ counter إلا من خلال interrupts تفعل على فترات أضعاف مضاعفة من الـ ticks. عموماً هذه ليست الطريقة المثلى لفعل ما تريد. استخدام profiler حتى لو كان بسيطاً كـ gprof و سوف يفي بالغرض لكي يريك المناطق التي تستهلاك معظم الوقت.
  9. هناك شيء لم يدخل عقلي في هذه المقارنة: كيف تكون ترجمة الكود بعمليات الـ optimization أسرع من حالة إنتاج ملف للتنقيح؟! حسب تجربتي إنتاج ملف تنفيذي للتنقيح يأخذ وقت أقصر إلى النصف تقريباً منه في حالة إنتاج ملف تنفيذي optimized.
  10. time كيف يحسب الوقت

    هذا يعتمد على تعريفك لمعنى "كم يستغرق من الوقت". إن كنت تقصد الوقت الطبيعي الخارجي الذي يحس به المستخدم, يعني يسمونها "ساعة الحائط": #include <ctime> int main() { std::time_t start = std::time(NULL); // Your code! std::time_t end = std::time(NULL); double duration = std::difftime(end, start); // duration in seconds } أما إن كنت تتكلم عن عدد الـ ticks التي يستغرقها البرنامج في قطعة كود: #include <ctime> int main() { std::clock_t start = std::clock(); // Your code! std::clock_t end = std::clock(); std::clock_t duration = end - start; // duration in ticks double duration_seconds = duration / CLOCKS_PER_SEC; // duration in seconds } في الحالتين يجب أن تكون حذراً لأن البرنامج في الحالة الأولى قد لا يعطى أولوية في التنفيذ في حالة ما على جهاز ما, و في الحالة الثانية قد توهمك عمليات الـ optimization بأن الكود لا يعمل أصلاً :wink:
  11. حساب باقي القسمة للاعداد double

    هناك دالة تعطيها البسط و المقام و ترجع لك الباقي: #include <cmath> #include <cassert> int main() { double numerator = 4.5, denominator = 3.0; assert( fmod(numerator, denominator) == 1.5 ); }
  12. هذا Microcontroller من سلالة الـ 68K الشهيرة: http://en.wikipedia.org/wiki/Freescale_68HC11 كان لدي تجربة بسيطة في برمجة 68K و لكن لا أعرف مالذي تريدين فهمه بالضبط؟!
  13. الله ينور عليك و الثلاث لغات التي تم مقارنتها مكتباتها مكتوبة بلغة C!
  14. فكر معي فى قيمة هذين المتغيرين

    جميل, في الحقيقة اعتقدت أن الكود سيؤدي إلى undefined behavior و لكن في الحقيقة يبقى الأمر unspecified فقط. تحياتي أخي محمد,
  15. فكر معي فى قيمة هذين المتغيرين

    وضعت سؤالاً حول الموضوع في Stackoverflow لعلنا نجد توضيح :) http://stackoverflow.com/questions/5986668/does-this-code-produce-undefined-behavior-or-it-is-merely-unspecified-behavior تحياتي...
  16. فكر معي فى قيمة هذين المتغيرين

    البرنامج خاطئ undefined behavior, لأنك تعتمد على عمل initialization لمتغير بقيمة متغير قيمته لم تحدد بعد. هذا ينشأ لأنك اعتمدت على unspecified behavior بحيث أن المترجم له الحق في تنفيذ أي من السطرين التاليين بالترتيب الذي يراه أنسب لأن كل سطر عبارة عن عملية global initialization int value1 = value2 + 10; int value2 = value1 + 10; هناك طرق عديدة لتنفيذ ما تريد بدون مشاكل, و لكن هذه الطريقة خاطئة. بالمناسبة هذا الأمر يطلق عليه static initialization order fiasco!
  17. و الله هذا الشيء يعتمد على مدى اعتمادية "البرنامج" الذي تريد القيام بكتابته. وضعت برنامج بين علامتين تنصيص لأن هذا الأمر يمكن أن يتم عن طريق search/replace متقدمة في IDE محترم و يمكن أن يصل الأمر حتى استخدام مكتبة من العيار الثقيل للحصول على دقة 100% في عملية الـ transformation التي تريد تطبيقها. في النهاية الدقة المطلوبة تعتمد على احتياجاتك. إن كان ما تريد تنفيذه يقتصر على مجموعة من الملفات, فيمكنك كتابة script بسيط بالاستعانة بأحد خبراء بايثون في المنتدى :P و من ثم تحاول معرفة إن كانت الطريقة المستخدمة ناجحة 100% مع مجموعة الملفات التي لديك أم أن هناك حالات لم يتم أخذها في الحسبان و ربما تقول ببعض التعديلات الطفيفة. هذه هي الطريقة الأسرع و لكن الطريقة السليمة هي استخدام html parser متكامل.
  18. شكلك متأثر بأفلام الخيال العلمي يا أخي! كيف يعني تحذف مكان في الرام؟!
  19. الكلمةالمفتاحية explicit

    موضوع مكرر... حاول البحث جيداً في المنتدى ستجد الكثير من المواضيع حول النقاط التي تطرحها: مافائدة الكلمة المحجوزة Explicit Using Explicit In Constructor مقاله بسيطه حول استخدام explicit
  20. عزيزي, المبرمجون الذين يعرفون ++C عن ظهر قلب يعدون على الأصابع في هذا العالم... تتكلم عن Stroustrup و Koeings و Herb Sutter المسؤول عن كل شاردة و واردة في الـ Parallelism في أي تقنية تنتجها Microsoft و Scott Meyers... و البعض الآخر! جميعنا نتعلم اللغة و هناك أمور كثيرة مفصلة في المقاييس لا تحتاج لمعرفتها إلا لو صادف استخدام هذه الميزة في مكتبة معينة كما حصل في حالتك. لذلك لا تقلق و حاول قدر المستطاع الاطلاع على كتب Stroustrup و مقالاته و على مقالات الأسماء المذكورة في الأعلى. هناك سؤال سئل في Stackoverflow و بصراحة الردود كانت تعبر عن الحقيقة! الموضوع مخفي هناك و لكن لي حق الوصول إليه :sleep:
  21. SYN Attack - source code by OPS

    جميل :) و لكن هذا النوع يمكن تفاديه بأبسط قواعد اللعبة... من الجميل أن تعدل الكود لكي تقوم بتغيير الـ IP packet header بحيث تستخدم عناوين مختلفة للمرسل بحيث أن الـ routers على الطرف الآخر لا تستفيد من عمل block لـ IP معين... تحياتي...
  22. للمصفوفات ثنائية الأبعاد هناك عدة طرق لفعل الموضوع. أولاً, استخدام المؤشرات سوف يمكنك من إنشاء Jagged Arrays, و ليست محصورة إمكانيات المؤشرات في الـ Multidimensional Arrays. الـ Jagged Arrays هي عبارة عن مصفوفات تحتوي على مصفوفات و التي بدورها قد تحتوي على مصفوفات بحيث يمكن أن تكون كل مصفوفة مختلفة عن الأخرى, أو بمعنى قد يختلف طول كل صف عن الآخر أو كل عامود عن الآخر(هذا يعتمد على كيفية نظرك للمصفوفة نفسها و ماهي الصفوف و ما هي الأعمدة من وجهة نظرك!). عموماً, أعتذر على التقصير, و لكن هنا رد كتبته منذ مدة في SO إن كان هناك ناحية غير مفهومة, ناقشها معنا بكل سرور :) http://stackoverflow.com/questions/1946830/multidimensional-variable-size-array-in-c/1946866#1946866 تحياتي...
  23. ماذا تعني ببرمجة الشبكات؟ هل لديك فكرة عامة عن مفهوم الشبكات و طبقاتها؟ عن البرمجة في أي طبقة تتكلم؟ هل تريد برمجة الخدمات الأساسية على مستوى الـ Network Layer؟ أم تريد البرمجة باستخدام الـ bare sockets, و لديك application protocol تريد كتابته؟ أم تريد التعامل مع الـ application protocols الشائعة كـ http و ftp و خلافه؟ ماهي برمجة الشبكات التي تتلكم عنها بالضبط؟ ربما تقصد الـ sockets؟ هذه مجموعة دروس مشهورة على الويب: http://beej.us/guide/bgnet/output/html/multipage/index.html