c - كلمات مفتاحيه keywords يوتيوب




لماذا يمكن int_$[:>=<٪-!. 0،}؛ تجميع؟ (4)

اليوم وجدت بناء جملة غريب مثل

 int _$[:>=<%-!.0,};

في بعض التعليمات البرمجية القديمة ، ولكن في الواقع لم يتم تعليق التعليمات البرمجية. يبدو أنه لا يوجد تقرير عن أخطاء ترجمة لهذا السطر. لقد اختبرت ذلك بشكل منفصل ويمكنه أيضًا تجميع:

int main(){
    int _$[:>=<%-!.0,};
    return 0;
}

لماذا يمكن أن تجمع؟

https://code.i-harness.com


إذا قمنا باستبدال الصور التخطيطية :> و <% موجودة في سطر التعليمات البرمجية ، فسينتهي بنا الأمر

int _$[]={-!.0,};

وهو ما يعادل

int _$[] = { -1, };

إنه تعريف للصفيف _$ type int [1] مع مُهيئ.

لاحظ أن هذا غير مضمون تمامًا للترجمة نظرًا لأن اللغة C القياسية لا تقدم على الفور دعمًا للشخصية $ في indentifiers. لأنها تتيح للتطبيقات تمديد مجموعة من charaters المدعومة على الرغم من. يبدو أن برنامج التحويل البرمجي الذي استخدمته معتمد $ في معرفات.


باستخدام Digraph (انظر أدناه) ، يتم تحويل الخط إلى:

int _$[]={-!.0,};

على الجانب الأيمن ، .0 هو الحرفي double ، ! هو عامل النفي المنطقي ، - هو عامل النفي الحسابي , وهو الفاصلة المتأخرة. معا {-!.0,} هو مُهيئ صفيف.

يعرّف الجانب الأيسر int _$[] صفيف int . ومع ذلك ، هناك مشكلة أخيرة ، _$ ليس معرفًا صالحًا في المعيار C. وتدعمه بعض المجمعات (مثل ، gcc ) gcc .

C11 §6.4.6 علامات الترقيم

في جميع جوانب اللغة ، الرموز الستة

<: :> <% %> %: %:%:

تتصرف ، على التوالي ، نفس الرموز الستة

[  ]  {  }  #  ##

حسنا،

  • الشرطة السفلية _ هي حرف معرف مسموح به ،
  • علامة الدولار gcc بالدولار gcc ،
  • قوس الأيسر [ يدل على نوع يجب أن يكون مجموعة ،
  • :> هو digraph ل ] ،
  • يساوي = هو الواجب ،
  • <% هو الرسم لـ { ،
  • -!.0 فقط -1 ( .0 عبارة عن 0.0 حرفي مزدوج ، ! يلقي ضمنيًا على (int) 0 وتعكسه منطقيًا ، و - سالبة) ،
  • يمكن أن يكون لديك فواصل زائدة في مُهيئات الصفيف {1 ، (2 ، 3 ،)} ،
  • و ; ينهي البيان.

إذن أنت تحصل عليه

int _$[] = {-1,};

هذا يعمل بسبب digraphs في C. السطر في السؤال يترجم مثل هذا:

int _$ [ :> = <% - ! .0  , } ;
int _$ [ ]  = {  - ! 0.0 , } ;

علاوة على ذلك:

  • .0 حرفي double .
  • ! هو عامل النفي المنطقي ، لذلك !.0 العوائد (int) 1 .
  • - هو عامل الإنكار الأحادي ، والذي ينتج (int) -1 .
  • فاصلة زائدة قانونية بعد عنصر صفيف.




syntax