اقتباس

Breakpoint

الـ breakpoint هي نقطة يضعها المبرمج عند أحد أسطر البرنامج ، تخبر الـ debugger أن يوقف البرنامج عند هذا السطر ويمكن معرفة حالة وقيمة المتغيرات عند هذا الوقت أي قبل تنفيذ الأسطر التالية؛ لها أكثر من فائدة مثلًا معرفة هل تم المرور على هذا الـ Block مثل Block الـ if ، أي هل تم تنفيذ مابداخله أو ماقيمة هذا المتغيّر في هذا الوقت من البرنامج كذلك معرفة قيم الـ Array كاملة وأيضّا معرفة قيمة العدّاد والرقم الذي توقّف عنده .

 إذا لم يقف البرنامج يعني أنه لم يمر على هذا السطر إما بسبب شرط if أو loop أو غير ذلك من الأسباب. 

إحدى طرق إضافتها في الكود : تقف عند السطر الذي تريده ، زر الفأرة الأيمن ، ثم اختيار insert break-point .

مثال :

في المثال نقرأ من المستخدم رقم ، نرسله للدالة ، الدالة تقسمه على 2 وتعيد الجزء الصحيح منه ، إذا كانت القيمة 1 فمافوق سيتم طباعة العبارة أما إذا كانت 0 ، لن يتم تنفيذ Block الـ if .

الـ Array في هذا المثال فقط حتى نرى العداد وصل إلى أي عدد ، ونرى قيم الـ Array كاملة .

#include <iostream>
#include <string>
using namespace std;

int fun(int num)
{
 return num / 2;

}
void main()
{
 //Breakpoint Example

 int num;
 cout << " Enter num: ";
 cin >> num;

 int Array[5];
 for (int i = 0; i < 5; i++)
 Array[i] = num *i;

 if (fun(num))
 {
 cout << "The number is greater than or equal 2" << endl;
 }
 system("pause");
}

قمت بوضع الـ breakpoint في السطر رقم 23 

أدخلت الرقم 3 ، في الأسفل نرى  قيم المتغيرات .

1 2 3 4 6 7 8

 

أدخلت رقم 1 ، ولم يحدث شيء لأن البرنامج لم يدخل الـ if أي لم يمر على الـ breakpoint.

اقتباس

تتبّع البرنامج وإيجاد الـ output

تتبّع الأكواد التالية وأوجد الـ output .

#include <iostream>
using namespace std;

int main()
{
   int x = 3;

   if (!x) //!

     cout << "!x" << endl;

  else cout << "x";

  system("pause");
  return 0;
}

Output : x 

#include <iostream>
using namespace std;

int main()
{
   int y = 3;

   if (!(!y)) //!!

     cout << "!!y" << endl;

   else cout << "y";

  system("pause");
 return 0;
}

Output: !!y

اقتباس

Syntax Error: Const Variable and Sending by Reference

لايمكن إرسال Const Variable بطريقة By reference إلى دالّة .

#include <iostream>
using namespace std;

void fun(int);

void main()
{
   const int ConstVar = 3; //const variable
    fun(ConstVar); 
}
void fun(int & a) // (&) Cause an Error
{
}

 

الخطأ الناتج:

Error 1 error LNK2019: unresolved external symbol “void __cdecl fun(int)” (?fun@@YAXH@Z) referenced in function _main C:\Users\Amjad\documents\visual studio 2013\Projects\myBlog\myBlog\main.obj myBlog

Error 2 error LNK1120: 1 unresolved externals C:\Users\Amjad\documents\visual studio 2013\Projects\myBlog\Debug\myBlog.exe 1 1 myBlog

اقتباس

تعريف المتغيرات

يمكن تعريف المتغيرات من نفس النوع في سطر واحد ويكون الفصل بينهم باستخدام الـ comma “,” وليس الـ semicolon “;”

#include <iostream>
using namespace std;

int main()
{
    int a, b, c;
    char x = '&' , y = '*';
    double num1 = 9.8, num2;

    system("pause");
    return 0;

}


السطر السابع : نلاحظ أنه تم تعريف متغيرين من نفس النوع في سطر واحد وإعطائهم قيم (initialize) في نفس الوقت .
السطر الثامن: تعريف متغيرين من نفس النوع في نفس السطر وإعطاء قيمة (initialize)  لواحد منهم فقط.

اقتباس

الفرق بين && و &

الفرق بين && و & هو :أن الـ compiler في حالة && يقوم باختبار العبارة الأولى إذا كانت خاطئة لايمر على العبارة الأخرى لأن الـ and يجب أن تكون كلتا العبارتين true فإذا كانت إحدى العبارتين false لاداعي لمرور الـ compiler للعبارة الآخرى ،

ولكن في حالة & يمر الـ compilerعلى العبارة الثانية حتى وإن كانت العبارة الأولى false ، لذلك من الأفضل استخدام && بدل &

ماذا لو كانت العبارة الأولى صحيحة في حالة && ؟

في هذه الحالة يقوم الـ compiler بالمرور على العبارة الآخرى لأنه كما قلنا يجب أن تكون كلتا العبارتين صحيحه ولايكفي عبارة واحدة

الفرق بين | و || هو : مشابه للفرق بين && و & ولكن الفرق في حالة ||  إذا كانت العبارة الأولى صحيحة لايمر على الأخرى لأن OR يكفي لتحققها أن تكون عبارة واحدة فقط true

 أما ( |) يقوم الـ compiler بالمرور على كلتا العبارتين وإن كانت الأولى صحيحية ،

في حالة( || ) ماذا لوكانت العبارة الأولى خاطئة ؟!

يقوم الـ compiler بالمرور على العبارة الأخرى وإذا كانت true يتحقق الشرط أما إذا كانت false لايتحقق الشرط .