سؤال

أنا أميل إلى استخدام كلمات تحديد تعلن تعيين بالتبادل ولكن يبدو أن يسبب إهانة لبعض الناس.هل هذا مبرر ؟ يجب فقط استخدام كلمة تعلن لأول مرة وأنا تعيين إلى متغير ؟ أو هل هناك أكثر من ذلك ؟

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

المحلول

تحدد وتعلن متشابهة ولكن تعيين مختلفة جدا.

هنا أنا أعلن (أو تحديد) متغير:

int x;

أنا هنا تعيين قيمة هذا المتغير:

x = 0;

هنا أقوم به سواء في عبارة واحدة:

int x = 0;

ملاحظة

ليس كل اللغات دعم إعلان الانتداب في جملة واحدة:

T-SQL

declare x int;
set x = 0;

بعض اللغات تتطلب تعيين قيمة متغير على الإعلان.هذا الشرط يسمح مترجم أو مترجم من اللغة إلى استنتاج نوع المتغير:

بيثون

x = 0

نصائح أخرى

وتعريف حيث يتم وصف قيمة أو وظيفة، وقال أي المترجم أو مبرمج بالضبط ما هو عليه، منها مثلا.

int foo()
{
  return 1;
}

int var; // or, e.g. int var = 5; but this is clearer.

وإعلان يقول المترجم، أو مبرمج أن وظيفة أو متغير موجود. منها مثلا.

int foo();
extern int var;

وتكون الإحالة عندما متغير ديه مجموعة قيمة لها، وعادة مع = المشغل. منها مثلا.

a = b;
a = foo();

ومن المهم استخدام المصطلحات الصحيحة، وإلا فإن الناس لا يعرفون ما الذي تتحدث عنه، أو بشكل غير صحيح نفترض أن كنت لا تعرف ما الذي تتحدث عنه.

هذه الشروط غالبا ما يكون دقيق المعاني في معايير لغات مختلفة.عندما يكون هذا هو الحال أنها لا ينبغي الخلط.

في c على سبيل المثال:

  • وظيفة قد تكون تعريف مرة واحدة فقط (عندما تقول ماذا يفعل) ، ولكن قد يكون أيضا أعلن قبل ذلك (عندما تقول ما هي الحجج التي يستغرق ونوع يعود).

  • وبالمثل متغير أعلن عندما تقول ما هو نوع من ذلك ، و هذا يحدث مرة واحدة فقط لكل نطاق.ولكن قد تعيين قيمة مرارا وتكرارا.(بعض اللغات أيضا التفريق بين التهيئة (اعطاء المتغير قيمة في إعلان ذلك الوقت) ، المهمة (تغيير القيمة في وقت لاحق).)

الاختلافات يمكن أن تبدو خفية ولكنها مهمة.ليس كل لغة يجعل نفس التمييز ، ولكن في C++ a إعلان متغير يجعل نوع و اسم متغير معروف مترجم

int i;

A تعريف متغير يخصص تخزين تحدد قيمة ابتدائية للمتغير.

i = 1;

يمكنك الجمع بين متغير الإعلان و التعريف في بيان واحد ، كما هو الحال عادة.

int x = 1;

إعلان المتغير داخل الدالة أيضا جانبا الذاكرة للمتغير ، لذلك البرمجية التالية ضمنا تعريف متغير a كجزء من الإعلان.

int main()
{
    int a;
    return 0;
}

منذ متغير a هو التعريف تلقائيا من قبل المترجم ، وسوف تحتوي على أي قيمة في موقع الذاكرة التي تم تخصيصها لذلك.هذا هو السبب في أنه ليس من الآمن استخدام التلقائي المتغيرات حتى لقد صراحة تعيين قيمة معروفة لهم.

وهو المهمة يأخذ مكان في أي وقت يمكنك تغيير قيمة متغير في البرنامج الخاص بك.

x = 2;
x++;
x += 4;

A إعلان وظيفة, مماثلة إلى متغير الإعلان يجعل وظيفة التوقيع المعروف أن المترجم.هذا يسمح لك استدعاء دالة في التعليمات البرمجية المصدر الخاصة بك قبل أن يتم تعريفه دون التسبب خطأ برنامج التحويل البرمجي.

int doSomething(float x);

A تعريف الدالة يحدد نوع الإرجاع, اسم, المعلمة القائمة تعليمات وظيفة.أول ثلاثة من هذه العناصر يجب أن تتطابق مع وظيفة الإعلان.وظيفة يجب أن يعرف فقط مرة واحدة في برنامج معين.

int doSomething(float x)
{
    if( x < 0 )
    {
        x = -x;
    }
    return static_cast<int>(x);
}

يمكنك الجمع بين وظيفة decalartion و الوضوح في واحدة ، ولكن يجب القيام بذلك قبل أن يتم استدعاء الدالة في أي مكان في البرنامج الخاص بك.

العامة الدور:تعريف = إعلان + المساحة المحجوزة.

تعريف الإعلان المهمة لها حالتين:

  1. للمتغيرات.
  2. للحصول على وظائف.

بالنسبة المتغيرات:

-- التعريف:
أقول المحول إلى احتياطي الذاكرة للمتغير.

int x;

-- إعلان:
أن نخبر المترجم أن متغير محدد في مكان آخر.

extern int x;

-- المهمة:
أن نخبر المترجم أن يضع قيمة في متغير.

x = 0;

بالنسبة وظائف:

-- التعريف:

int functionDef(int x){
  int x;  
  ...  
  ...  
  ...  
  return x;  
}

-- إعلان: هو مجرد نموذج الدالة.

int functionDef(int x);

والجواب الصحيح يعتمد على اللغة التي نتحدث عنها. في كثير من الأحيان لغات الكمبيوتر مصطلحات محددة، إما بسبب مواصفات اللغة أو المجتمع كبروا حول اللغة. كوبول، الى الوراء عندما كنت عليه، وكان مصطلحات مختلفة بكثير من لغات أخرى السائدة (بمعنى اللغات أقرب إلى التيار الرئيسي للتنمية اللغة، وليس الأعمال الرئيسية). وضعت عليها بعض المصطلحات غريبة.

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

وقد تعتمد على اللغة، كما قيل. اعتقد انها حقا يتوقف على ما إذا كان يتم استخدام الكلمات لأشياء مثل الطبقات. وبالنسبة لمعظم أنواع البيانات مناقشتها هنا، قد السؤال لا تكون ذات صلة بكثير. في C ++ (انظر ج ++ - ما هو الفرق بين تعريف وإعلان؟ )، فئة أو بنية دائما بالضبط تعريف واحد ولكن يمكن أن يتم تعريف صفر أو أكثر من مرة. لا يمكن تعريف فئة دون تعريف. هكذا "أعلن" قد يكون مرادفا "المستخدمة".

في معظم اللغات، وأنواع بسيطة مثل الأعداد الصحيحة لا تحتاج تعريفات بالطريقة التي الطبقات القيام به.

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