اذهب إلى المحتوى
  • 0

ما  الفرق بين cout و printf في لغة ++C؟

Mohssen A Mohssen

السؤال

أرى في كثير من الأحيان بعض المبرمجين يستعملون الدالة printf لطباعة القيم والنصوص، بينما أستخدم أنا cout للقيام بهذه المهمة.

لذلك أتسأل ما الفرق بين الطريقتين؟ ومتى أستعمل كل طريقة منهم؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

std::cout جزء من لغة ++C، بينما الدالة printf جزء من لغة C ولكن على الرغم من ذلك فيمكنك أن تستعملها في ++C بدون مشكلة. ولكلٍ منهما مميزات.

طريقة الكتابة

الدالة printf تستخدم طريقة إستدعاء الدوال العادية، لذلك قد يكون إستعمالها أسهل بكثير من إستعمال std::cout التي تستعمل syntax مختلف كليًا عن الدالة printf، حيث يتم إستعمال المعامل >> ، لذلك قد يكون إستعمال الدالة printf أقصر في الكتابة، لكن هذا الأمر لن يكون ملاحظًا حيث أنه ليس فرق كبير، لكن الفرق يظهر بشكل أكبر عندما تحاول أن تقوم بطباعة أكثر من قيمة في مرة واحدة، حيث أن الدالة printf تسمح لك بتنسيق النص قبل طباعته (إستخدام بعض القيم مثل d% و s% وتمرير متغيرات أو قيم أخرى للتحل مكانها)، اظر مثًلا الكود التالي:

printf("Message %d: %s.\n", id, content[id]);
std::cout << "Message " << id << ": " << content[id] << "." << std::endl;

لاحظ كيف أن الدالة printf أصبحت أقصر بكثير في الكتابة وأن النص يكون أكثر وضوحًا عند إستعمالها. أيضًا سوف يصبح الأمر أكثر تعقيدًا من هذا بكثير عندما تحاول أن تقوم بطباعة متغيرات بقيم محتلفة مثل الأرقام بنظام hex أو octa :

#include <iomanip>

printf("0x%05x\n", 0x3e3);
std::cout << "0x" << std::hex << std::setfill('0') << std::setw(5) << 0x3e3 << std::endl;

طباعة الأرقام الصحيحة integers

عندما تستعمل std::cout لطباعة أرقام بقيم وأنواع مختلفة فإنه يتم تحويل هذه الأرقام بشكل تلقائي، لكن على الجانب الآخر فيجب عليك أن تستعمل syntax معين للقيام بنفس المهمة بإستخدام printf، فعلى سبيل المثال لطباعة متغير من نوع size_t بإستخدام الدالة printf فعليك أن تستعمل النص zu%، كما أن طباعة النوع int64_t  ستحتاج إلى إستعمال "PRId64"% ، بينما std::cout لا تحتاج إلى أي شيء لطباعة هذه الأنواع، حيث يتم تحويلها بشكل تلقائي دون تدخل من المبرمج.

الأداء Performance

std::cout تستعمل iostream ليتم طباعة البيانات إلى الطرفية، ومن المعروف أن iostream بطيء للغاية مقارنة بإستعمال الدالة printf، بالطبع فرق الأداء لن يكون ملوحظًا عند طباعة نصوص صغيرة أو عند حفظها إلى ملفات، لكن عندما تريد إخراج نصوص كبيرة للغاية وفي أقل وقت ممكن فعليك أن تستعمل الدالة printf

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بالرغم من أن cout أبطأ قليلاً وأن iostream أبطأ من cstudio لكن cout تتعرف تلقائياً على نمط المتغير الذي نريد طباعته ولا حاجة لتحديد نمطه ضمن عبارة الطباعة، حيث أن تحديد النمط في cout يأخذ قليلاً من الوقت أثناء عمل البرنامج،ولكنه يحل مشكلة type safety أي لن يحدث خطأ بسبب اختلاف نمط المتغير الذي يكتبه المبرمج عن نمطه الحقيقي مما يمنع الأخطاء.

وبإلغاء مزامنة iostream مع المكتبة القياسية تصبح cout سريعة جداً، 

كيفية تحديد نمط المتغير المراد طباعته في printf 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...