এই "[0… 255] =" সি সিনট্যাক্সটি কী?


108

Js0n.c- তে উল্লেখ করা হচ্ছে

কোড সিনট্যাক্সটি নীচে রয়েছে:

    static void *gostruct[] =
    {
        [0 ... 255] = &&l_bad,
        ['\t'] = &&l_loop, [' '] = &&l_loop, ['\r'] = &&l_loop, ['\n'] = &&l_loop,
        ['"'] = &&l_qup,
        [':'] = &&l_loop, [','] = &&l_loop,
        ['['] = &&l_up, [']'] = &&l_down, // tracking [] and {} individually would allow fuller validation but is really messy
        ['{'] = &&l_up, ['}'] = &&l_down,
        ['-'] = &&l_bare, [48 ... 57] = &&l_bare, // 0-9
        [65 ... 90] = &&l_bare, // A-Z
        [97 ... 122] = &&l_bare // a-z
    };

........
.......

l_bad:
    *vlen = cur - json; // where error'd
    return 0;

........
........

এখানে কী করা হচ্ছে তা কি কেউ ব্যাখ্যা করতে পারেন? সিনট্যাক্স [0 ... 255]এবং &&l_badএখানে কি করে ?

উত্তর:


109

... এটি জিসিসি দ্বারা সরবরাহিত একটি এক্সটেনশন

https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html#Designated-Inits

একই মানটিতে উপাদানগুলির একটি পরিসর শুরু করতে লিখুন [first ... last] = value। এটি একটি জিএনইউ এক্সটেনশন। উদাহরণ স্বরূপ,

 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

&& অন্য এক্সটেনশন

https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels-as-Values

আপনি আন্যারি অপারেটরের সাথে বর্তমান ফাংশনে (বা একটি ফাংশনযুক্ত) সংজ্ঞায়িত লেবেলের ঠিকানা পেতে পারেন &&। মান টাইপ আছে void *। এই মানটি একটি ধ্রুবক এবং যেখানে এই ধরণের ধ্রুবক বৈধ সেখানে ব্যবহার করা যেতে পারে। উদাহরণ স্বরূপ:

 void *ptr;
 /* ... */
 ptr = &&foo;

22
এটি সমস্ত একসাথে রেখে এই কোডটি একটি লাফ টেবিল তৈরি করছে যা সূচকগুলির জন্য সম্ভবত পার্সারের জন্য ascii মান ব্যবহার করে।
র‌্যাচেট ফ্রিক

1
আমি যতদূর বলতে পারি বিশেষত একটি জেএসএন পার্সার।
কেভিন

1
পছন্দ করুন কখন কোনও অ্যাড্রেস-অফ অপারেটর (&) প্রয়োগের জন্য সিনট্যাক্স ত্রুটি হয়ে গেছে? আমি সি 99 এ অনুমান করছি, সম্ভবত? সর্বশেষবার যখন আমি ভিজ্যুয়াল সি ++ নিয়মিত ব্যবহার করি 1998 এর কাছাকাছি ছিল, যা প্রাক-C99 এএনএসআই স্ট্যান্ডার্ড হত এবং সংকলকটি তখন এটির অনুমতি দেয় (আমি জানি কারণ &প্রোডাকশন কোডে ডাবল-আপের একটি টাইপ মনে আছে !)
ডডজেথেসট্রোলার

3
@ ডডজেটেসট্যাম্রোলার &&সম্পূর্ণ আলাদা টোকেন &, সুতরাং মান সি ব্যাকরণটি &&x"x এর ঠিকানার ঠিকানা" হিসাবে ব্যাখ্যা করতে পারে এমন কোনও উপায় নেই যেখানে মান মান নির্বিশেষে &x
তাভিয়ান বার্নস

4
@ ডডজেটেসটাম্রোলার: --সর্বদা হিসাবে পার্স করা হয় --এবং &&সর্বদা হিসাবে পার্স করা হয় &&। সি 99 §6.4¶4: পরবর্তী
নিঞ্জাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.