أهم 10 أسباب لتعلم لغة C ++
يلعب C ++ دورًا أساسيًا في العصر الحديث حيث أن العديد من الأنظمة المعاصرة مثل أنظمة التشغيل ومتصفحات الويب وقواعد البيانات وما إلى ذلك لديها كود C ++ في جزء على الأقل من قاعدة التعليمات البرمجية الخاصة بهم. علاوة على ذلك ، فإن C ++ مفيد للغاية في المجالات الحرجة للأداء بسبب سرعته.
➊__ ++ الشعبية والرواتب العالية
C ++ هي واحدة من أكثر اللغات شعبية في العالم. يستخدمه حوالي 4.4 مليون مطور حول العالم. كما أن مطوري C ++ مطلوبون تمامًا ، وهم يشغلون بعض الوظائف الأكثر أجورًا في الصناعة مع متوسط أجر أساسي يبلغ 103،03 دولارًا سنويًا.
➋__ يحتوي C ++ على دعم مكتبة وفيرة
تحتوي C ++ على مكتبة النماذج القياسية (STL) وهي مفيدة جدًا لأنها تساعد في كتابة التعليمات البرمجية بشكل مضغوط وبسرعة كما هو مطلوب. يحتوي بشكل رئيسي على أربعة مكونات ، أي الخوارزميات والحاويات والوظائف والمكرر.
الخوارزميات من أنواع مختلفة مثل الفرز والبحث وما إلى ذلك. تقوم الحاويات بتخزين الفئات لتنفيذ هياكل البيانات المختلفة التي يتم استخدامها بشكل شائع مثل المكدسات والطوابير وجداول التجزئة والمتجهات والمجموعات والقوائم والخرائط وما إلى ذلك.
تسمح الممرات بتخصيص عمل الوظيفة المرتبطة بمساعدة المعلمات التي تم تمريرها. أيضا ، يتم استخدام التكرارات للعمل على سلسلة من القيم.
➌__ لدى C ++ مجتمع كبير
هناك مجتمع كبير عبر الإنترنت من مستخدمي وخبراء C ++ يكون مفيدًا بشكل خاص في حالة الحاجة إلى أي دعم. هناك الكثير من الموارد مثل GeeksforGeeks وما إلى ذلك المتاحة على الإنترنت بخصوص C ++. تتضمن بعض الموارد الأخرى عبر الإنترنت لـ C ++ StackOverflow و cppreference.com و C ++ القياسي وما إلى ذلك.
➍__ C ++ في قواعد البيانات
هناك العديد من قواعد البيانات الحديثة مثل MySQL و MongoDB و MemSQL وما إلى ذلك مكتوبة بلغة C ++. هذا لأن C ++ حديث تمامًا ويدعم ميزات مثل الاستثناءات وتعبيرات لامدا وما إلى ذلك. يتم استخدام العديد من قواعد البيانات المكتوبة بلغة C ++ في جميع التطبيقات قيد الاستخدام تقريبًا مثل YouTube و WordPress و Twitter و
➎__ C ++ في أنظمة التشغيل
تتم كتابة جميع أنظمة التشغيل الرئيسية مثل Windows و Linux و Android و Ubuntu و iOS وما إلى ذلك في مزيج من C و C ++. تتم كتابة تطبيقات Windows بلغة C ++ ، بينما تتم كتابة تطبيقات Android بلغة Java مع C / C ++ مع أوقات تشغيل غير افتراضية لدعم C ++. أيضا ، يمكن استخدام C ++ لتطوير جوهر التطبيقات في iOS.
بشكل عام ، يتم استخدام C أو C ++ في أنظمة التشغيل بسبب السرعة والطبيعة المكتوبة بشدة لهذه اللغات.
➏__ 6. C ++ في المجمعات
C ++ أقرب إلى مستوى الأجهزة وهي لغة منخفضة المستوى نسبيًا. لهذا السبب ، يتم استخدامه في العديد من المترجمين كلغة برمجة خلفية. مثال على ذلك هو مجموعة GNU Compiler Collection (GCC) المكتوبة حاليًا في الغالب بلغة C ++ جنبًا إلى جنب مع C.
➐__ C ++ في متصفحات الويب
تم تطوير الكثير من متصفحات الويب باستخدام C ++ مثل Chrome و Firefox و Safari وما إلى ذلك. يحتوي Chrome على C ++ في محرك العرض ومحرك JavaScript وواجهة المستخدم. يستخدم Firefox بشكل أساسي في محرك العرض وقليلًا في واجهة المستخدم. يستخدم Safari أيضًا C ++ في محرك العرض ومحرك JavaScript.
تستخدم كل متصفحات الويب هذه والمزيد C ++ ، خاصة في محركات التقديم لأنها توفر السرعة المطلوبة اللازمة لمحركات التقديم لأنها تحتاج إلى عرض المحتوى بمعدل متسارع.
➑__ 8. C ++ في الرسومات
تستخدم التطبيقات التي تتطلب رسومات مثل معالجة الصور الرقمية ، ورؤية الكمبيوتر ، وبرامج تسجيل الشاشة ، وما إلى ذلك ، لغة C ++ نظرًا لسرعتها العالية. يمكن أن يشمل ذلك أيضًا ألعابًا مختلفة تحتوي على رسومات كجزء كبير من هيكلها.
➒__ C++ في الأنظمة المدمجة
C ++ أقرب إلى مستوى الأجهزة ، لذا فهو مفيد جدًا في الأنظمة المضمنة حيث أن البرامج والأجهزة في هذه الأجهزة مقترنة بشكل وثيق. هناك العديد من الأنظمة المضمنة التي تستخدم C ++ مثل الساعات الذكية ومشغلات MP3 وأنظمة GPS وما إلى ذلك.
➓__ سي ++ المحمولة
يمكن نقل البرامج التي تم تطويرها في C ++ من منصة إلى أخرى. هذا هو أحد الأسباب الرئيسية التي تجعل التطبيقات التي تتطلب تطوير أنظمة متعددة أو أجهزة متعددة تستخدم C ++.
⬅ الفقرة الثانية :
لغة C ++ هي إحدى لغات التطوير الرئيسية التي تستخدمها العديد من مشروعات Google مفتوحة المصدر. كما يعرف كل مبرمج C ++ ، فإن اللغة لديها العديد من الميزات القوية ، ولكن هذه القوة تجلب معها التعقيد ، والذي بدوره يمكن أن يجعل الشفرة أكثر عرضة للأخطاء ويصعب قراءتها وصيانتها.
الهدف من هذا الدليل هو إدارة هذا التعقيد من خلال وصف بالتفصيل جرعات وما لا يجب أن يكتبه كود C ++. توجد هذه القواعد لإبقاء قاعدة التعليمات البرمجية قابلة للإدارة مع الاستمرار في السماح للمبرمجين باستخدام ميزات لغة C ++ بشكل منتج.
النمط ، المعروف أيضًا بالقراءة ، هو ما نسميه الاصطلاحات التي تحكم رمز C ++ الخاص بنا. المصطلح Style هو تسمية خاطئة قليلاً ، لأن هذه الاصطلاحات تغطي أكثر بكثير من مجرد تنسيق الملف المصدر.
تتوافق معظم المشاريع مفتوحة المصدر التي طورتها Google مع المتطلبات الواردة في هذا الدليل.
لاحظ أن هذا الدليل ليس برنامجًا تعليميًا لـ C ++: نفترض أن القارئ على دراية باللغة.
هناك بعض الأهداف الأساسية التي نعتقد أن هذا الدليل يجب أن يخدمها. هذه هي الأسباب الأساسية التي تكمن وراء كل القواعد الفردية. من خلال جلب هذه الأفكار إلى الواجهة ، نأمل في إجراء مناقشات على أرض الواقع وتوضيح لمجتمعنا الأوسع سبب وجود القواعد ولماذا تم اتخاذ قرارات معينة. إذا كنت تفهم الأهداف التي تخدمها كل قاعدة ، فيجب أن تكون أكثر وضوحًا للجميع عندما يتم التنازل عن القاعدة (يمكن أن يكون بعضها) ، وأي نوع من الحجة أو البديل سيكون ضروريًا لتغيير قاعدة في الدليل.
أهداف دليل الأسلوب كما نراها حاليًا هي كما يلي:
يجب أن تسحب قواعد النمط وزنها يجب أن تكون فائدة قاعدة النمط كبيرة بما يكفي لتبرير مطالبة جميع مهندسينا بتذكرها. يتم قياس الفائدة بالنسبة لقاعدة التعليمات البرمجية التي سنحصل عليها بدون القاعدة ، لذلك قد تظل القاعدة ضد ممارسة ضارة جدًا لها فائدة صغيرة إذا كان من غير المحتمل أن يفعلها الناس على أي حال. يشرح هذا المبدأ في الغالب القواعد التي لا نمتلكها ، بدلاً من القواعد التي نتبعها: على سبيل المثال ، يتعارض goto مع العديد من المبادئ التالية ، ولكنه نادر بالفعل ، لذا لا يناقش دليل الأسلوب ذلك. ، وليس الكاتب من المتوقع أن تستمر قاعدة التعليمات البرمجية (ومعظم المكونات الفردية المقدمة إليها) لبعض الوقت. ونتيجة لذلك ، سيتم قضاء المزيد من الوقت في قراءة معظم التعليمات البرمجية الخاصة بنا بدلاً من كتابتها. نختار صراحةً تحسين تجربة مهندس البرمجيات العادي لدينا لقراءة الشفرة وصيانتها وتصحيحها في قاعدة التعليمات البرمجية بدلاً من تسهيلها عند كتابة الشفرة المذكورة. يعد "ترك أثر للقارئ" نقطة فرعية شائعة بشكل خاص لهذا المبدأ: عندما يحدث شيء مفاجئ أو غير عادي في مقتطف من التعليمات البرمجية (على سبيل المثال ، نقل ملكية المؤشر) ، وترك تلميحات نصية للقارئ عند هذه النقطة الاستخدام ذو قيمة (std :: unique_ptr يوضح نقل الملكية بشكل لا لبس فيه في موقع المكالمة). كن متسقًا مع التعليمات البرمجية الحالية ، يتيح لنا استخدام نمط واحد باستمرار من خلال قاعدة التعليمات البرمجية الخاصة بنا التركيز على المشكلات الأخرى (الأكثر أهمية). يسمح التناسق أيضًا بالتشغيل التلقائي: تعمل الأدوات التي تقوم بتنسيق الرمز الخاص بك أو ضبط # تتضمن فقط بشكل صحيح عندما تكون التعليمات البرمجية الخاصة بك متوافقة مع توقعات الأدوات. في كثير من الحالات ، تتلخص القواعد التي تُنسب إلى "كن متسقًا" إلى "اختر واحدة فقط وتوقف عن القلق بشأنها" ؛ إن القيمة المحتملة للسماح بمرونة في هذه النقاط تفوقها تكلفة وجود الناس يجادلون فيها.
كن متسقًا مع مجتمع C ++ الأوسع عندما يكون مناسبًا الاتساق مع الطريقة التي تستخدم بها المنظمات الأخرى C ++ لها قيمة لنفس أسباب الاتساق داخل قاعدة التعليمات البرمجية الخاصة بنا. إذا نجحت ميزة في معيار C ++ في حل مشكلة ، أو إذا كانت بعض المصطلحات معروفة ومقبولة على نطاق واسع ، فهذه حجة لاستخدامها. ومع ذلك ، في بعض الأحيان تكون الميزات والعبارات القياسية معيبة ، أو تم تصميمها للتو دون مراعاة احتياجات قاعدة التعليمات البرمجية الخاصة بنا. في هذه الحالات (كما هو موضح أدناه) من المناسب تقييد أو حظر الميزات القياسية. في بعض الحالات ، نفضل مكتبة محلية أو مكتبة تابعة لجهة خارجية على مكتبة محددة في معيار C ++ ، إما بسبب التفوق المتصور أو القيمة غير الكافية لنقل قاعدة التعليمات البرمجية إلى الواجهة القياسية ، وتجنب الإنشاءات المفاجئة أو الخطيرة تحتوي C ++ على ميزات أكثر إثارة للدهشة أو أخطر مما قد يعتقد المرء في لمحة. توجد بعض قيود دليل الأسلوب لمنع الوقوع في هذه المزالق. هناك حد كبير للتنازل عن دليل الأسلوب على مثل هذه القيود ، لأن التنازل عن هذه القواعد غالبًا ما يهدد بشكل مباشر بصحة البرنامج. تجنب التركيبات التي سيجدها مبرمج C ++ العادي صعبًا أو يصعب صيانته يحتوي C ++ على ميزات قد لا تكون مناسبة بشكل عام بسبب التعقيد الذي يقدمه إلى التعليمات البرمجية. في الكود المستخدم على نطاق واسع ، قد يكون من المقبول أكثر استخدام تركيبات لغة أكثر تعقيدًا ، لأن أي فوائد للتطبيق الأكثر تعقيدًا يتم مضاعفتها على نطاق واسع حسب الاستخدام ، ولا يلزم دفع تكلفة فهم التعقيد مرة أخرى عند العمل مع أجزاء جديدة من قاعدة الكود. في حالة الشك ، يمكن البحث عن تنازلات لقواعد من هذا النوع عن طريق سؤال العملاء المتوقعين لمشروعك. هذا مهم بشكل خاص لقاعدة التعليمات البرمجية الخاصة بنا لأن ملكية الرمز وعضوية الفريق تتغير بمرور الوقت: حتى إذا كان كل من يعمل مع جزء من التعليمات البرمجية يفهمها حاليًا ، فإن هذا الفهم ليس مضمونًا لبضعة سنوات من الآن.
كن على دراية بمقياسنا مع وجود قاعدة تعليمات برمجية تضم أكثر من 100 مليون خط وآلاف المهندسين ، يمكن أن تصبح بعض الأخطاء والتبسيط لمهندس واحد مكلفة بالنسبة للكثيرين. على سبيل المثال ، من المهم بشكل خاص تجنب تلويث مساحة الاسم العالمية: يصعب التعامل مع اصطدامات الأسماء عبر قاعدة التعليمات البرمجية لمئات الملايين من الأسطر ويصعب تجنبها إذا وضع كل شخص الأشياء في مساحة الاسم العالمية ، ويرجع ذلك إلى التحسين عند الضرورة. ضرورية ومناسبة ، حتى عندما تتعارض مع المبادئ الأخرى لهذه الوثيقة.
الغرض من هذه الوثيقة هو توفير أقصى قدر من التوجيه مع تقييد معقول. كما هو الحال دائمًا ، يجب أن يسود الحس السليم والذوق الرفيع. من خلال هذا ، نشير تحديدًا إلى الاتفاقيات المعمول بها لمجتمع Google C ++ بأكمله ، وليس فقط تفضيلاتك الشخصية أو تلك الخاصة بفريقك. كن متشككًا ومترددًا في استخدام بنيات ذكية أو غير عادية: عدم وجود حظر ليس مثل الترخيص للمضي قدمًا. استخدم حكمك ، وإذا لم تكن متأكدًا ، فالرجاء عدم التردد في أن تطلب من قادة المشروع الحصول على مدخلات إضافية.
🔺____اصدار ++C :
حاليًا ، يجب أن يستهدف الرمز C ++ 17 ، أي يجب ألا يستخدم ميزات C ++ 2x. ستتقدم نسخة C ++ المستهدفة بواسطة هذا الدليل (بقوة) بمرور الوقت.
لا تستخدم ملحقات غير قياسية.
ضع في اعتبارك قابلية النقل للبيئات الأخرى قبل استخدام الميزات من C ++ 14 و C ++ 17 في مشروعك.
_____ملفات الأساس :
بشكل عام ، يجب أن يكون لكل ملف .cc ملف .h مقترن. هناك بعض الاستثناءات الشائعة ، مثل unittests وملفات .cc الصغيرة التي تحتوي على دالة main () فقط.
الاستخدام الصحيح لملفات العناوين يمكن أن يحدث فرقًا كبيرًا في سهولة قراءة التعليمات البرمجية وحجمها وأدائها.
سترشدك القواعد التالية خلال المزالق المختلفة لاستخدام ملفات العناوين.
🔺_____الرؤوس المستقلة :
يجب أن تكون ملفات الرأس مكتفية ذاتيا (يتم تجميعها بمفردها) وتنتهي بـ. h. يجب أن تنتهي الملفات غير الرأسية المخصصة للتضمين بـ .inc وأن يتم استخدامها بشكل مقتصد.
يجب أن تكون جميع ملفات الرأس مكتفية ذاتيا. لا يجب أن يلتزم المستخدمون وأدوات إعادة البيع بشروط خاصة لتضمين الرأس. على وجه التحديد ، يجب أن يحتوي الرأس على حراس رأس وأن يتضمن جميع الرؤوس الأخرى التي يحتاجها.
تفضل وضع تعريفات القالب والوظائف المضمنة في نفس الملف كإعلاناتهم. يجب تضمين تعريفات هذه البنيات في كل ملف .cc يستخدمها ، أو قد يفشل البرنامج في الربط في بعض تكوينات البناء. إذا كانت الإعلانات والتعريفات في ملفات مختلفة ، بما في ذلك الأول يجب أن يتضمن الملف بشكل مؤقت. لا تنقل هذه التعريفات إلى ملفات الرأس المضمنة بشكل منفصل (-inl.h) ؛ كانت هذه الممارسة شائعة في الماضي ، ولكن لم يعد مسموحًا بها.
كاستثناء ، يُسمح بتعريف القالب الذي تم استنساخه بشكل صريح لجميع المجموعات ذات الصلة من وسيطات القالب ، أو التي تعتبر تفاصيل تنفيذ خاصة لفئة ، في ملف واحد فقط .cc الذي ينشئ القالب.
هناك حالات نادرة يكون فيها الملف المصمم ليتم تضمينه غير مكتفي ذاتيًا. عادةً ما يتم تضمين هذه في مواقع غير عادية ، مثل منتصف ملف آخر. قد لا يستخدمون حراس الرأس ، وقد لا يشملوا متطلباتهم الأساسية. قم بتسمية هذه الملفات بالملحق .inc. استخدم بشكل مقتصد ، وفضل الرؤوس المستقلة عند الإمكان .
🔺____مساحات الأسماء غير المسماة والمتغيرات الثابتة :
عندما لا تكون هناك حاجة إلى الإشارة إلى تعريفات في ملف .cc خارج ذلك الملف ، ضعها في مساحة اسم غير مسماة أو قم بتعريفها على أنها ثابتة. لا تستخدم أي من هذه التركيبات في ملفات. h.
يمكن إعطاء جميع الإعلانات ارتباطات داخلية بوضعها في مساحات أسماء غير مسماة. يمكن أيضًا إعطاء الوظائف والمتغيرات ارتباطًا داخليًا بإعلانها ثابتة. هذا يعني أنه لا يمكن الوصول إلى أي شيء تعلن عنه من ملف آخر. إذا أعلن ملف مختلف عن شيء يحمل نفس الاسم ، فإن الكيانين مستقلان تمامًا.
يتم تشجيع استخدام الارتباط الداخلي في ملفات .cc لجميع التعليمات البرمجية التي لا يلزم الرجوع إليها في مكان آخر. لا تستخدم الربط الداخلي في ملفات. h.
تنسيق مساحات الأسماء غير المسماة مثل مساحات الأسماء المسماة. في تعليق الإنهاء ، اترك اسم مساحة الاسم فارغًا:
namespace {
...
} // namespace
🔺_____غير الأعضاء والعضو الثابت والوظائف العالمية :
تفضل وضع الدوال غير الأعضاء في مساحة الاسم ؛ نادرا ما تستخدم وظائف عالمية تماما. لا تستخدم فئة ببساطة لتجميع وظائف ثابتة. يجب أن ترتبط الأساليب الثابتة للفصل بشكل عام بشكل وثيق بحالات الفصل أو البيانات الثابتة للفصل.
يمكن أن تكون وظائف الأعضاء غير الأعضاء والثابتة مفيدة في بعض الحالات. يؤدي وضع الوظائف غير الأعضاء في مساحة الاسم إلى تجنب تلويث مساحة الاسم العامة.
قد تكون وظائف الأعضاء غير الأعضاء والعضوية أكثر منطقية كأعضاء في فئة جديدة ، خاصة إذا كانوا يصلون إلى موارد خارجية أو لديهم تبعيات كبيرة.
في بعض الأحيان يكون من المفيد تعريف دالة غير مرتبطة بمثيل فئة. يمكن أن تكون هذه الوظيفة عضوًا ثابتًا أو وظيفة غير عضو. لا يجب أن تعتمد الدوال غير الأعضاء على المتغيرات الخارجية ، ويجب أن تكون موجودة دائمًا تقريبًا في مساحة الاسم. لا تقم بإنشاء فئات فقط لتجميع وظائف الأعضاء الثابتة ؛ هذا لا يختلف عن مجرد إعطاء أسماء الوظائف بادئة مشتركة ، وعادة ما تكون هذه المجموعة غير ضرورية على أي حال.
إذا قمت بتعريف دالة غير عضو وهي مطلوبة فقط في ملف .cc الخاص بها ، فاستخدم الارتباط الداخلي للحد من نطاقها.
🔺____التحويلات الضمنية :
لا تحدد التحويلات الضمنية. استخدم الكلمة الأساسية الصريحة لمشغلي التحويل ومنشئي الوسيطة الواحدة.
تسمح التحويلات الضمنية باستخدام كائن من نوع واحد (يسمى نوع المصدر) حيث يتوقع نوع مختلف (يسمى نوع الوجهة) ، مثل عند تمرير وسيطة int إلى دالة تأخذ معلمة مزدوجة.
بالإضافة إلى التحويلات الضمنية التي تحددها اللغة ، يمكن للمستخدمين تحديد الخاصة بهم ، عن طريق إضافة أعضاء مناسبين إلى تعريف الفئة لنوع المصدر أو الوجهة. يتم تعريف التحويل الضمني في نوع المصدر بواسطة عامل تحويل النوع المسمى بعد نوع الوجهة (على سبيل المثال ، منطقي عامل التشغيل ()). يتم تعريف التحويل الضمني في نوع الوجهة بواسطة مُنشئ يمكن أن يأخذ نوع المصدر كوسيطة فقط (أو الوسيطة فقط بدون قيمة افتراضية).
يمكن تطبيق الكلمة الأساسية الصريحة على منشئ أو (منذ C ++ 11) عامل تحويل ، للتأكد من أنه لا يمكن استخدامها إلا عندما يكون نوع الوجهة صريحًا في نقطة الاستخدام ، على سبيل المثال مع الجبيرة. لا ينطبق هذا فقط على التحويلات الضمنية ، ولكن على بنية تهيئة قائمة C ++ 11:
class Foo {
explicit Foo(int x, double y);
...
};
void Func(Foo f);
🔺____السحر الخاص بـ Google(Google-Specific Magic) :
هناك العديد من الحيل والأدوات المساعدة التي نستخدمها لجعل كود C ++ أكثر قوة ، وطرق مختلفة نستخدم فيها C ++ قد تختلف عن ما تراه في مكان آخر.
🔺___Windows Code رمز ويندوز :
طور مبرمجو Windows مجموعتهم الخاصة من اصطلاحات الترميز ، المستمدة بشكل أساسي من الاصطلاحات الموجودة في رؤوس Windows وكود Microsoft الآخر. نريد أن نجعل من السهل على أي شخص فهم الشفرة الخاصة بك ، لذلك لدينا مجموعة واحدة من الإرشادات لكل من يكتب C ++ على أي نظام أساسي.
يجدر تكرار بعض الإرشادات التي قد تنسى إذا كنت معتادًا على نمط Windows السائد:
لا تستخدم الرموز المجرية (على سبيل المثال ، تسمية عدد صحيح iNum). استخدم اصطلاحات تسمية Google ، بما في ذلك امتداد .cc لملفات المصدر.
يعرّف Windows العديد من مرادفاته الخاصة للأنواع البدائية ، مثل DWORD و HANDLE وما إلى ذلك. ومن المقبول تمامًا وتشجيعه على استخدام هذه الأنواع عند استدعاء وظائف Windows API. ومع ذلك ، ابق على مقربة قدر الإمكان من أنواع C ++ الأساسية. على سبيل المثال ، استخدم const TCHAR * بدلاً من LPCTSTR.
عند التحويل البرمجي باستخدام Microsoft Visual C ++ ، قم بتعيين برنامج التحويل البرمجي على مستوى التحذير 3 أو أعلى ، وتعامل مع كل التحذيرات على أنها أخطاء.
لا تستخدم #pragma مرة واحدة ؛ بدلاً من ذلك ، استخدم Google القياسي للحراس. يجب أن يكون المسار في عناصر الحماية المضمنة نسبة إلى أعلى شجرة المشروع.
في الواقع ، لا تستخدم أي ملحقات غير قياسية ، مثل #pragma و __declspec ، إلا إذا كان يجب عليك ذلك تمامًا. يُسمح باستخدام __declspec (dllimport) و __declspec (dllexport) ؛ ومع ذلك ، يجب عليك استخدامها من خلال وحدات الماكرو مثل DLLIMPORT و DLLEXPORT ، بحيث يمكن لأي شخص تعطيل الملحقات بسهولة إذا شارك الرمز.
يلعب C ++ دورًا أساسيًا في العصر الحديث حيث أن العديد من الأنظمة المعاصرة مثل أنظمة التشغيل ومتصفحات الويب وقواعد البيانات وما إلى ذلك لديها كود C ++ في جزء على الأقل من قاعدة التعليمات البرمجية الخاصة بهم. علاوة على ذلك ، فإن C ++ مفيد للغاية في المجالات الحرجة للأداء بسبب سرعته.
➊__ ++ الشعبية والرواتب العالية
C ++ هي واحدة من أكثر اللغات شعبية في العالم. يستخدمه حوالي 4.4 مليون مطور حول العالم. كما أن مطوري C ++ مطلوبون تمامًا ، وهم يشغلون بعض الوظائف الأكثر أجورًا في الصناعة مع متوسط أجر أساسي يبلغ 103،03 دولارًا سنويًا.
➋__ يحتوي C ++ على دعم مكتبة وفيرة
تحتوي C ++ على مكتبة النماذج القياسية (STL) وهي مفيدة جدًا لأنها تساعد في كتابة التعليمات البرمجية بشكل مضغوط وبسرعة كما هو مطلوب. يحتوي بشكل رئيسي على أربعة مكونات ، أي الخوارزميات والحاويات والوظائف والمكرر.
الخوارزميات من أنواع مختلفة مثل الفرز والبحث وما إلى ذلك. تقوم الحاويات بتخزين الفئات لتنفيذ هياكل البيانات المختلفة التي يتم استخدامها بشكل شائع مثل المكدسات والطوابير وجداول التجزئة والمتجهات والمجموعات والقوائم والخرائط وما إلى ذلك.
تسمح الممرات بتخصيص عمل الوظيفة المرتبطة بمساعدة المعلمات التي تم تمريرها. أيضا ، يتم استخدام التكرارات للعمل على سلسلة من القيم.
➌__ لدى C ++ مجتمع كبير
هناك مجتمع كبير عبر الإنترنت من مستخدمي وخبراء C ++ يكون مفيدًا بشكل خاص في حالة الحاجة إلى أي دعم. هناك الكثير من الموارد مثل GeeksforGeeks وما إلى ذلك المتاحة على الإنترنت بخصوص C ++. تتضمن بعض الموارد الأخرى عبر الإنترنت لـ C ++ StackOverflow و cppreference.com و C ++ القياسي وما إلى ذلك.
➍__ C ++ في قواعد البيانات
هناك العديد من قواعد البيانات الحديثة مثل MySQL و MongoDB و MemSQL وما إلى ذلك مكتوبة بلغة C ++. هذا لأن C ++ حديث تمامًا ويدعم ميزات مثل الاستثناءات وتعبيرات لامدا وما إلى ذلك. يتم استخدام العديد من قواعد البيانات المكتوبة بلغة C ++ في جميع التطبيقات قيد الاستخدام تقريبًا مثل YouTube و WordPress و Twitter و
➎__ C ++ في أنظمة التشغيل
تتم كتابة جميع أنظمة التشغيل الرئيسية مثل Windows و Linux و Android و Ubuntu و iOS وما إلى ذلك في مزيج من C و C ++. تتم كتابة تطبيقات Windows بلغة C ++ ، بينما تتم كتابة تطبيقات Android بلغة Java مع C / C ++ مع أوقات تشغيل غير افتراضية لدعم C ++. أيضا ، يمكن استخدام C ++ لتطوير جوهر التطبيقات في iOS.
بشكل عام ، يتم استخدام C أو C ++ في أنظمة التشغيل بسبب السرعة والطبيعة المكتوبة بشدة لهذه اللغات.
➏__ 6. C ++ في المجمعات
C ++ أقرب إلى مستوى الأجهزة وهي لغة منخفضة المستوى نسبيًا. لهذا السبب ، يتم استخدامه في العديد من المترجمين كلغة برمجة خلفية. مثال على ذلك هو مجموعة GNU Compiler Collection (GCC) المكتوبة حاليًا في الغالب بلغة C ++ جنبًا إلى جنب مع C.
➐__ C ++ في متصفحات الويب
تم تطوير الكثير من متصفحات الويب باستخدام C ++ مثل Chrome و Firefox و Safari وما إلى ذلك. يحتوي Chrome على C ++ في محرك العرض ومحرك JavaScript وواجهة المستخدم. يستخدم Firefox بشكل أساسي في محرك العرض وقليلًا في واجهة المستخدم. يستخدم Safari أيضًا C ++ في محرك العرض ومحرك JavaScript.
تستخدم كل متصفحات الويب هذه والمزيد C ++ ، خاصة في محركات التقديم لأنها توفر السرعة المطلوبة اللازمة لمحركات التقديم لأنها تحتاج إلى عرض المحتوى بمعدل متسارع.
➑__ 8. C ++ في الرسومات
تستخدم التطبيقات التي تتطلب رسومات مثل معالجة الصور الرقمية ، ورؤية الكمبيوتر ، وبرامج تسجيل الشاشة ، وما إلى ذلك ، لغة C ++ نظرًا لسرعتها العالية. يمكن أن يشمل ذلك أيضًا ألعابًا مختلفة تحتوي على رسومات كجزء كبير من هيكلها.
➒__ C++ في الأنظمة المدمجة
C ++ أقرب إلى مستوى الأجهزة ، لذا فهو مفيد جدًا في الأنظمة المضمنة حيث أن البرامج والأجهزة في هذه الأجهزة مقترنة بشكل وثيق. هناك العديد من الأنظمة المضمنة التي تستخدم C ++ مثل الساعات الذكية ومشغلات MP3 وأنظمة GPS وما إلى ذلك.
➓__ سي ++ المحمولة
يمكن نقل البرامج التي تم تطويرها في C ++ من منصة إلى أخرى. هذا هو أحد الأسباب الرئيسية التي تجعل التطبيقات التي تتطلب تطوير أنظمة متعددة أو أجهزة متعددة تستخدم C ++.
⬅ الفقرة الثانية :
لغة C ++ هي إحدى لغات التطوير الرئيسية التي تستخدمها العديد من مشروعات Google مفتوحة المصدر. كما يعرف كل مبرمج C ++ ، فإن اللغة لديها العديد من الميزات القوية ، ولكن هذه القوة تجلب معها التعقيد ، والذي بدوره يمكن أن يجعل الشفرة أكثر عرضة للأخطاء ويصعب قراءتها وصيانتها.
الهدف من هذا الدليل هو إدارة هذا التعقيد من خلال وصف بالتفصيل جرعات وما لا يجب أن يكتبه كود C ++. توجد هذه القواعد لإبقاء قاعدة التعليمات البرمجية قابلة للإدارة مع الاستمرار في السماح للمبرمجين باستخدام ميزات لغة C ++ بشكل منتج.
النمط ، المعروف أيضًا بالقراءة ، هو ما نسميه الاصطلاحات التي تحكم رمز C ++ الخاص بنا. المصطلح Style هو تسمية خاطئة قليلاً ، لأن هذه الاصطلاحات تغطي أكثر بكثير من مجرد تنسيق الملف المصدر.
تتوافق معظم المشاريع مفتوحة المصدر التي طورتها Google مع المتطلبات الواردة في هذا الدليل.
لاحظ أن هذا الدليل ليس برنامجًا تعليميًا لـ C ++: نفترض أن القارئ على دراية باللغة.
هناك بعض الأهداف الأساسية التي نعتقد أن هذا الدليل يجب أن يخدمها. هذه هي الأسباب الأساسية التي تكمن وراء كل القواعد الفردية. من خلال جلب هذه الأفكار إلى الواجهة ، نأمل في إجراء مناقشات على أرض الواقع وتوضيح لمجتمعنا الأوسع سبب وجود القواعد ولماذا تم اتخاذ قرارات معينة. إذا كنت تفهم الأهداف التي تخدمها كل قاعدة ، فيجب أن تكون أكثر وضوحًا للجميع عندما يتم التنازل عن القاعدة (يمكن أن يكون بعضها) ، وأي نوع من الحجة أو البديل سيكون ضروريًا لتغيير قاعدة في الدليل.
أهداف دليل الأسلوب كما نراها حاليًا هي كما يلي:
يجب أن تسحب قواعد النمط وزنها يجب أن تكون فائدة قاعدة النمط كبيرة بما يكفي لتبرير مطالبة جميع مهندسينا بتذكرها. يتم قياس الفائدة بالنسبة لقاعدة التعليمات البرمجية التي سنحصل عليها بدون القاعدة ، لذلك قد تظل القاعدة ضد ممارسة ضارة جدًا لها فائدة صغيرة إذا كان من غير المحتمل أن يفعلها الناس على أي حال. يشرح هذا المبدأ في الغالب القواعد التي لا نمتلكها ، بدلاً من القواعد التي نتبعها: على سبيل المثال ، يتعارض goto مع العديد من المبادئ التالية ، ولكنه نادر بالفعل ، لذا لا يناقش دليل الأسلوب ذلك. ، وليس الكاتب من المتوقع أن تستمر قاعدة التعليمات البرمجية (ومعظم المكونات الفردية المقدمة إليها) لبعض الوقت. ونتيجة لذلك ، سيتم قضاء المزيد من الوقت في قراءة معظم التعليمات البرمجية الخاصة بنا بدلاً من كتابتها. نختار صراحةً تحسين تجربة مهندس البرمجيات العادي لدينا لقراءة الشفرة وصيانتها وتصحيحها في قاعدة التعليمات البرمجية بدلاً من تسهيلها عند كتابة الشفرة المذكورة. يعد "ترك أثر للقارئ" نقطة فرعية شائعة بشكل خاص لهذا المبدأ: عندما يحدث شيء مفاجئ أو غير عادي في مقتطف من التعليمات البرمجية (على سبيل المثال ، نقل ملكية المؤشر) ، وترك تلميحات نصية للقارئ عند هذه النقطة الاستخدام ذو قيمة (std :: unique_ptr يوضح نقل الملكية بشكل لا لبس فيه في موقع المكالمة). كن متسقًا مع التعليمات البرمجية الحالية ، يتيح لنا استخدام نمط واحد باستمرار من خلال قاعدة التعليمات البرمجية الخاصة بنا التركيز على المشكلات الأخرى (الأكثر أهمية). يسمح التناسق أيضًا بالتشغيل التلقائي: تعمل الأدوات التي تقوم بتنسيق الرمز الخاص بك أو ضبط # تتضمن فقط بشكل صحيح عندما تكون التعليمات البرمجية الخاصة بك متوافقة مع توقعات الأدوات. في كثير من الحالات ، تتلخص القواعد التي تُنسب إلى "كن متسقًا" إلى "اختر واحدة فقط وتوقف عن القلق بشأنها" ؛ إن القيمة المحتملة للسماح بمرونة في هذه النقاط تفوقها تكلفة وجود الناس يجادلون فيها.
كن متسقًا مع مجتمع C ++ الأوسع عندما يكون مناسبًا الاتساق مع الطريقة التي تستخدم بها المنظمات الأخرى C ++ لها قيمة لنفس أسباب الاتساق داخل قاعدة التعليمات البرمجية الخاصة بنا. إذا نجحت ميزة في معيار C ++ في حل مشكلة ، أو إذا كانت بعض المصطلحات معروفة ومقبولة على نطاق واسع ، فهذه حجة لاستخدامها. ومع ذلك ، في بعض الأحيان تكون الميزات والعبارات القياسية معيبة ، أو تم تصميمها للتو دون مراعاة احتياجات قاعدة التعليمات البرمجية الخاصة بنا. في هذه الحالات (كما هو موضح أدناه) من المناسب تقييد أو حظر الميزات القياسية. في بعض الحالات ، نفضل مكتبة محلية أو مكتبة تابعة لجهة خارجية على مكتبة محددة في معيار C ++ ، إما بسبب التفوق المتصور أو القيمة غير الكافية لنقل قاعدة التعليمات البرمجية إلى الواجهة القياسية ، وتجنب الإنشاءات المفاجئة أو الخطيرة تحتوي C ++ على ميزات أكثر إثارة للدهشة أو أخطر مما قد يعتقد المرء في لمحة. توجد بعض قيود دليل الأسلوب لمنع الوقوع في هذه المزالق. هناك حد كبير للتنازل عن دليل الأسلوب على مثل هذه القيود ، لأن التنازل عن هذه القواعد غالبًا ما يهدد بشكل مباشر بصحة البرنامج. تجنب التركيبات التي سيجدها مبرمج C ++ العادي صعبًا أو يصعب صيانته يحتوي C ++ على ميزات قد لا تكون مناسبة بشكل عام بسبب التعقيد الذي يقدمه إلى التعليمات البرمجية. في الكود المستخدم على نطاق واسع ، قد يكون من المقبول أكثر استخدام تركيبات لغة أكثر تعقيدًا ، لأن أي فوائد للتطبيق الأكثر تعقيدًا يتم مضاعفتها على نطاق واسع حسب الاستخدام ، ولا يلزم دفع تكلفة فهم التعقيد مرة أخرى عند العمل مع أجزاء جديدة من قاعدة الكود. في حالة الشك ، يمكن البحث عن تنازلات لقواعد من هذا النوع عن طريق سؤال العملاء المتوقعين لمشروعك. هذا مهم بشكل خاص لقاعدة التعليمات البرمجية الخاصة بنا لأن ملكية الرمز وعضوية الفريق تتغير بمرور الوقت: حتى إذا كان كل من يعمل مع جزء من التعليمات البرمجية يفهمها حاليًا ، فإن هذا الفهم ليس مضمونًا لبضعة سنوات من الآن.
كن على دراية بمقياسنا مع وجود قاعدة تعليمات برمجية تضم أكثر من 100 مليون خط وآلاف المهندسين ، يمكن أن تصبح بعض الأخطاء والتبسيط لمهندس واحد مكلفة بالنسبة للكثيرين. على سبيل المثال ، من المهم بشكل خاص تجنب تلويث مساحة الاسم العالمية: يصعب التعامل مع اصطدامات الأسماء عبر قاعدة التعليمات البرمجية لمئات الملايين من الأسطر ويصعب تجنبها إذا وضع كل شخص الأشياء في مساحة الاسم العالمية ، ويرجع ذلك إلى التحسين عند الضرورة. ضرورية ومناسبة ، حتى عندما تتعارض مع المبادئ الأخرى لهذه الوثيقة.
الغرض من هذه الوثيقة هو توفير أقصى قدر من التوجيه مع تقييد معقول. كما هو الحال دائمًا ، يجب أن يسود الحس السليم والذوق الرفيع. من خلال هذا ، نشير تحديدًا إلى الاتفاقيات المعمول بها لمجتمع Google C ++ بأكمله ، وليس فقط تفضيلاتك الشخصية أو تلك الخاصة بفريقك. كن متشككًا ومترددًا في استخدام بنيات ذكية أو غير عادية: عدم وجود حظر ليس مثل الترخيص للمضي قدمًا. استخدم حكمك ، وإذا لم تكن متأكدًا ، فالرجاء عدم التردد في أن تطلب من قادة المشروع الحصول على مدخلات إضافية.
🔺____اصدار ++C :
حاليًا ، يجب أن يستهدف الرمز C ++ 17 ، أي يجب ألا يستخدم ميزات C ++ 2x. ستتقدم نسخة C ++ المستهدفة بواسطة هذا الدليل (بقوة) بمرور الوقت.
لا تستخدم ملحقات غير قياسية.
ضع في اعتبارك قابلية النقل للبيئات الأخرى قبل استخدام الميزات من C ++ 14 و C ++ 17 في مشروعك.
_____ملفات الأساس :
بشكل عام ، يجب أن يكون لكل ملف .cc ملف .h مقترن. هناك بعض الاستثناءات الشائعة ، مثل unittests وملفات .cc الصغيرة التي تحتوي على دالة main () فقط.
الاستخدام الصحيح لملفات العناوين يمكن أن يحدث فرقًا كبيرًا في سهولة قراءة التعليمات البرمجية وحجمها وأدائها.
سترشدك القواعد التالية خلال المزالق المختلفة لاستخدام ملفات العناوين.
🔺_____الرؤوس المستقلة :
يجب أن تكون ملفات الرأس مكتفية ذاتيا (يتم تجميعها بمفردها) وتنتهي بـ. h. يجب أن تنتهي الملفات غير الرأسية المخصصة للتضمين بـ .inc وأن يتم استخدامها بشكل مقتصد.
يجب أن تكون جميع ملفات الرأس مكتفية ذاتيا. لا يجب أن يلتزم المستخدمون وأدوات إعادة البيع بشروط خاصة لتضمين الرأس. على وجه التحديد ، يجب أن يحتوي الرأس على حراس رأس وأن يتضمن جميع الرؤوس الأخرى التي يحتاجها.
تفضل وضع تعريفات القالب والوظائف المضمنة في نفس الملف كإعلاناتهم. يجب تضمين تعريفات هذه البنيات في كل ملف .cc يستخدمها ، أو قد يفشل البرنامج في الربط في بعض تكوينات البناء. إذا كانت الإعلانات والتعريفات في ملفات مختلفة ، بما في ذلك الأول يجب أن يتضمن الملف بشكل مؤقت. لا تنقل هذه التعريفات إلى ملفات الرأس المضمنة بشكل منفصل (-inl.h) ؛ كانت هذه الممارسة شائعة في الماضي ، ولكن لم يعد مسموحًا بها.
كاستثناء ، يُسمح بتعريف القالب الذي تم استنساخه بشكل صريح لجميع المجموعات ذات الصلة من وسيطات القالب ، أو التي تعتبر تفاصيل تنفيذ خاصة لفئة ، في ملف واحد فقط .cc الذي ينشئ القالب.
هناك حالات نادرة يكون فيها الملف المصمم ليتم تضمينه غير مكتفي ذاتيًا. عادةً ما يتم تضمين هذه في مواقع غير عادية ، مثل منتصف ملف آخر. قد لا يستخدمون حراس الرأس ، وقد لا يشملوا متطلباتهم الأساسية. قم بتسمية هذه الملفات بالملحق .inc. استخدم بشكل مقتصد ، وفضل الرؤوس المستقلة عند الإمكان .
🔺____مساحات الأسماء غير المسماة والمتغيرات الثابتة :
عندما لا تكون هناك حاجة إلى الإشارة إلى تعريفات في ملف .cc خارج ذلك الملف ، ضعها في مساحة اسم غير مسماة أو قم بتعريفها على أنها ثابتة. لا تستخدم أي من هذه التركيبات في ملفات. h.
يمكن إعطاء جميع الإعلانات ارتباطات داخلية بوضعها في مساحات أسماء غير مسماة. يمكن أيضًا إعطاء الوظائف والمتغيرات ارتباطًا داخليًا بإعلانها ثابتة. هذا يعني أنه لا يمكن الوصول إلى أي شيء تعلن عنه من ملف آخر. إذا أعلن ملف مختلف عن شيء يحمل نفس الاسم ، فإن الكيانين مستقلان تمامًا.
يتم تشجيع استخدام الارتباط الداخلي في ملفات .cc لجميع التعليمات البرمجية التي لا يلزم الرجوع إليها في مكان آخر. لا تستخدم الربط الداخلي في ملفات. h.
تنسيق مساحات الأسماء غير المسماة مثل مساحات الأسماء المسماة. في تعليق الإنهاء ، اترك اسم مساحة الاسم فارغًا:
namespace {
...
} // namespace
🔺_____غير الأعضاء والعضو الثابت والوظائف العالمية :
تفضل وضع الدوال غير الأعضاء في مساحة الاسم ؛ نادرا ما تستخدم وظائف عالمية تماما. لا تستخدم فئة ببساطة لتجميع وظائف ثابتة. يجب أن ترتبط الأساليب الثابتة للفصل بشكل عام بشكل وثيق بحالات الفصل أو البيانات الثابتة للفصل.
يمكن أن تكون وظائف الأعضاء غير الأعضاء والثابتة مفيدة في بعض الحالات. يؤدي وضع الوظائف غير الأعضاء في مساحة الاسم إلى تجنب تلويث مساحة الاسم العامة.
قد تكون وظائف الأعضاء غير الأعضاء والعضوية أكثر منطقية كأعضاء في فئة جديدة ، خاصة إذا كانوا يصلون إلى موارد خارجية أو لديهم تبعيات كبيرة.
في بعض الأحيان يكون من المفيد تعريف دالة غير مرتبطة بمثيل فئة. يمكن أن تكون هذه الوظيفة عضوًا ثابتًا أو وظيفة غير عضو. لا يجب أن تعتمد الدوال غير الأعضاء على المتغيرات الخارجية ، ويجب أن تكون موجودة دائمًا تقريبًا في مساحة الاسم. لا تقم بإنشاء فئات فقط لتجميع وظائف الأعضاء الثابتة ؛ هذا لا يختلف عن مجرد إعطاء أسماء الوظائف بادئة مشتركة ، وعادة ما تكون هذه المجموعة غير ضرورية على أي حال.
إذا قمت بتعريف دالة غير عضو وهي مطلوبة فقط في ملف .cc الخاص بها ، فاستخدم الارتباط الداخلي للحد من نطاقها.
🔺____التحويلات الضمنية :
لا تحدد التحويلات الضمنية. استخدم الكلمة الأساسية الصريحة لمشغلي التحويل ومنشئي الوسيطة الواحدة.
تسمح التحويلات الضمنية باستخدام كائن من نوع واحد (يسمى نوع المصدر) حيث يتوقع نوع مختلف (يسمى نوع الوجهة) ، مثل عند تمرير وسيطة int إلى دالة تأخذ معلمة مزدوجة.
بالإضافة إلى التحويلات الضمنية التي تحددها اللغة ، يمكن للمستخدمين تحديد الخاصة بهم ، عن طريق إضافة أعضاء مناسبين إلى تعريف الفئة لنوع المصدر أو الوجهة. يتم تعريف التحويل الضمني في نوع المصدر بواسطة عامل تحويل النوع المسمى بعد نوع الوجهة (على سبيل المثال ، منطقي عامل التشغيل ()). يتم تعريف التحويل الضمني في نوع الوجهة بواسطة مُنشئ يمكن أن يأخذ نوع المصدر كوسيطة فقط (أو الوسيطة فقط بدون قيمة افتراضية).
يمكن تطبيق الكلمة الأساسية الصريحة على منشئ أو (منذ C ++ 11) عامل تحويل ، للتأكد من أنه لا يمكن استخدامها إلا عندما يكون نوع الوجهة صريحًا في نقطة الاستخدام ، على سبيل المثال مع الجبيرة. لا ينطبق هذا فقط على التحويلات الضمنية ، ولكن على بنية تهيئة قائمة C ++ 11:
class Foo {
explicit Foo(int x, double y);
...
};
void Func(Foo f);
🔺____السحر الخاص بـ Google(Google-Specific Magic) :
هناك العديد من الحيل والأدوات المساعدة التي نستخدمها لجعل كود C ++ أكثر قوة ، وطرق مختلفة نستخدم فيها C ++ قد تختلف عن ما تراه في مكان آخر.
🔺___Windows Code رمز ويندوز :
طور مبرمجو Windows مجموعتهم الخاصة من اصطلاحات الترميز ، المستمدة بشكل أساسي من الاصطلاحات الموجودة في رؤوس Windows وكود Microsoft الآخر. نريد أن نجعل من السهل على أي شخص فهم الشفرة الخاصة بك ، لذلك لدينا مجموعة واحدة من الإرشادات لكل من يكتب C ++ على أي نظام أساسي.
يجدر تكرار بعض الإرشادات التي قد تنسى إذا كنت معتادًا على نمط Windows السائد:
لا تستخدم الرموز المجرية (على سبيل المثال ، تسمية عدد صحيح iNum). استخدم اصطلاحات تسمية Google ، بما في ذلك امتداد .cc لملفات المصدر.
يعرّف Windows العديد من مرادفاته الخاصة للأنواع البدائية ، مثل DWORD و HANDLE وما إلى ذلك. ومن المقبول تمامًا وتشجيعه على استخدام هذه الأنواع عند استدعاء وظائف Windows API. ومع ذلك ، ابق على مقربة قدر الإمكان من أنواع C ++ الأساسية. على سبيل المثال ، استخدم const TCHAR * بدلاً من LPCTSTR.
عند التحويل البرمجي باستخدام Microsoft Visual C ++ ، قم بتعيين برنامج التحويل البرمجي على مستوى التحذير 3 أو أعلى ، وتعامل مع كل التحذيرات على أنها أخطاء.
لا تستخدم #pragma مرة واحدة ؛ بدلاً من ذلك ، استخدم Google القياسي للحراس. يجب أن يكون المسار في عناصر الحماية المضمنة نسبة إلى أعلى شجرة المشروع.
في الواقع ، لا تستخدم أي ملحقات غير قياسية ، مثل #pragma و __declspec ، إلا إذا كان يجب عليك ذلك تمامًا. يُسمح باستخدام __declspec (dllimport) و __declspec (dllexport) ؛ ومع ذلك ، يجب عليك استخدامها من خلال وحدات الماكرو مثل DLLIMPORT و DLLEXPORT ، بحيث يمكن لأي شخص تعطيل الملحقات بسهولة إذا شارك الرمز.
0 تعليقات