جزوه تایپ شده برنامه نویسی شبکه
با پایتون سی شارپ شیرافکن دیوید ب. ماکوفسکی مترجم عین الله جعفرنژاد قمی محم علمی کاربردی ضا ماهر پیام نور علی کریم
ً “” “” “” ++ “” “” “” # () (). # ++ “”. ً ++ ::
?:
*
” “. ” ” . : ++
++ ً ( .*) ++ 
++ (). ” &&” ” ” ||
: ()
++ () () ً : (). ++ () ++[69]
: ++ (ً ). () () ++ / : ( /) () ()، ً ً، [72]++، ً ً () ()
“” () = ++ : [73]
[ capture ]( ) -> { }
++: [ ضبط ] < > ( ) -> { }
() :
[ عکسبرداری ] { }
:
[]( ) { + ; } // []( ) -> { + ; } // [capture]
[74] [75] ()، که سپس توسط نزدیکترین کنترلکننده استثنای مناسب دستگیر میشود. استثنا باعث می شود که محدوده فعلی خارج شود، و همچنین هر محدوده بیرونی (تکثیر) تا زمانی که یک کنترل کننده مناسب پیدا شود، به نوبه خود تخریب کنندگان هر شیء را در این محدوده های خارج شده فرا می خواند. [76] در همان زمان، یک استثنا به عنوان یک شی ارائه می شود که داده های مربوط به مشکل شناسایی شده را حمل می کند. [77]
برخی از راهنماهای سبک C++، مانند گوگل، [78] LLVM، [79] و Qt [80] استفاده از استثناها را ممنوع میکنند.
کد ایجاد استثنا در داخل یک بلوک قرار می گیرد. جزوه برنامه نویسی شبکه در بلوک های جداگانه (هندلرها) مدیریت می شوند. هر بلوک می تواند چندین کنترل کننده استثنا داشته باشد، همانطور که در مثال زیر قابل مشاهده است. [81]trycatchtry
#include <iostream>
#include <بردار>
#include <stdexcept>
int main () {
امتحان کن {
std :: vector < int > vec { 3 , 4 , 3 , 1 };
int i { vec . در ( 4 )}; // یک استثنا پرتاب می کند، std::out_of_range (شاخص سازی برای vec از 0-3 است نه 1-4)
}
// یک کنترل کننده استثنا، std::out_of_range را می گیرد که توسط vec.at(4) پرتاب می شود.
catch ( std :: out_of_range & e ) {
std :: cerr << “دسترسی به عنصری که وجود ندارد: ” << e . what () << ‘n’ ;
}
// برای گرفتن سایر استثناهای کتابخانه استاندارد (آنها از std::exception مشتق می شوند)
catch ( std :: استثنا و e ) {
std :: cerr << “Exception انداخته شد: ” << e . what () << ‘n’ ;
}
// همه استثناهای ناشناخته را بگیرید (یعنی مواردی که از std::exception مشتق نمی شوند)
گرفتن (…) {
std :: cerr << “خطای مرگبار n ” ;
}
}
همچنین می توان استثناها را به صورت هدفمند با استفاده از کلمه کلیدی مطرح کرد. این استثنائات به روش معمول رسیدگی می شود. در برخی موارد، به دلایل فنی نمی توان از استثناها استفاده کرد. یکی از این نمونه ها یک جزء حیاتی از یک سیستم تعبیه شده است، که در آن هر عملیات باید تضمین شود که در مدت زمان مشخصی تکمیل شود. این را نمی توان با استثنا تعیین کرد زیرا هیچ ابزاری برای تعیین حداکثر زمان لازم برای رسیدگی به یک استثنا وجود ندارد. [82]throw
برخلاف مدیریت سیگنال ، که در آن تابع هندلینگ از نقطه شکست فراخوانی میشود، مدیریت استثنا قبل از وارد شدن بلوک catch از محدوده فعلی خارج میشود، که ممکن است در تابع فعلی یا هر یک از فراخوانیهای تابع قبلی در حال حاضر در پشته قرار داشته باشد.

دانلود رایگان خلاصه کتاب برنامه نویسی شبکه
انواع برشمرده شده
این بخش گزیده ای از نوع Enumerated § C++ است. [ ویرایش ]
C++ دارای انواع enumeration است که مستقیماً از C به ارث برده شدهاند و عمدتاً مانند اینها کار میکنند، با این تفاوت که enumeration یک نوع واقعی در C++ است که بررسی زمان کامپایل را اضافه میکند. همچنین (مانند ساختارها)، enumکلمه کلیدی C++ به طور خودکار با یک typedef ترکیب می شود ، به طوری که به جای نامگذاری نوع enum name، به سادگی آن را نامگذاری کنید name. این را می توان در C با استفاده از typedef شبیه سازی کرد:typedef enum {Value1, Value2} name;
C++11 همچنین نوع دومی از شمارش را ارائه میکند که به آن جزوه برنامه نویسی شبکه محدودهای میگویند . اینها از نظر نوع ایمن هستند: شمارشگرها به طور ضمنی به یک نوع عدد صحیح تبدیل نمی شوند. در میان چیزهای دیگر، این اجازه می دهد تا جریان ورودی/خروجی برای نوع شمارش تعریف شود. یکی دیگر از ویژگیهای شمارشهای دامنهدار این است که شمارشگرها نشت نمیکنند، بنابراین استفاده از آن نیاز به پیشوند با نام شمارش دارد (مثلاً Color::Redبرای اولین شمارشگر در مثال زیر)، مگر اینکه از یک using enumاعلان (معرفی شده در C++20 ) استفاده شده باشد. تا شمارش كنندگان را به محدوده فعلي وارد كند. یک شمارش محدوده با عبارت enum class(یا enum struct) مشخص می شود. مثلا:
enum class Color { Red , Green , Blue };
نوع زیربنایی یک شمارش یک نوع انتگرال تعریف شده توسط پیاده سازی است که به اندازه کافی بزرگ است تا همه مقادیر شمارش شده را در خود جای دهد. لازم نیست کوچکترین نوع ممکن باشد. نوع زیربنایی را می توان مستقیماً مشخص کرد، که امکان “اعلامیه های پیش رو” شمارش ها را فراهم می کند:
enum class رنگ : طولانی { قرمز , سبز , آبی }; // باید در اندازه و چیدمان حافظه با نوع ‘long’ enum class متناسب باشد Shapes : char ; // اعلامیه فوروارد. اگر بعداً مقادیری تعریف شده باشند که در «char» جا نمیشوند، یک خطا است.
کتابخانه استاندارد
پیش نویس استاندارد “Working Paper” که به عنوان C++98 تایید شد. نیمی از اندازه آن به کتابخانه استاندارد C++ اختصاص یافت.
مقاله اصلی: کتابخانه استاندارد C++
استاندارد C++ از دو بخش تشکیل شده است: زبان اصلی و کتابخانه استاندارد. برنامه نویسان C++ در هر پیاده سازی اصلی C++ انتظار دومی را دارند [ شفاف سازی ] ; شامل انواع انبوه ( بردارها ، لیستها، نقشهها، مجموعهها، صفها، )، ()، /( )، ()، ()، ++ ++، (++) ++() ()، () ( ) () #++ ++ (ً ) ً ++ – “” ً (/). [83]
++ ++ ++
++ [84] ++، ++ «++ » ++کامپایلرها و ابزارهای بررسی استاتیک برای ایجاد قوانینی برای کشف شیوه های برنامه نویسی بد.
هدف اصلی نوشتن کارآمد و پیوسته از نوع و منبع امن C++ است.
دستورالعمل های اصلی [85] در جزوه برنامه نویسی شبکه افتتاحیه در CPPCon 2015 اعلام شد.
رهنمودها با کتابخانه پشتیبانی راهنما (GSL)، [86] یک کتابخانه فقط سرصفحه ای از انواع و توابع برای پیاده سازی دستورالعمل های اصلی و ابزارهای جستجوگر ایستا برای اجرای قوانین دستورالعمل همراه است. [87]
سازگاری
برای دادن آزادی بیشتر به فروشندگان کامپایلر، کمیته استانداردهای C++ تصمیم گرفت اجرای نامها ، مدیریت استثناها و سایر ویژگیهای خاص پیادهسازی را دیکته نکند. نقطه ضعف این تصمیم این است که انتظار می رود کد شی تولید شده توسط کامپایلرهای مختلف ناسازگار باشد. با این حال، تلاشهایی برای استانداردسازی کامپایلرها برای ماشینها یا سیستمهای عامل خاص (به عنوان مثال C++ ABI) وجود داشت، [88] اگرچه به نظر میرسد که اکنون تا حد زیادی رها شدهاند.
با سی
اطلاعات بیشتر: سازگاری C و C++
C++ اغلب به عنوان ابرمجموعه C در نظر گرفته می شود، اما این کاملاً درست نیست. [89] اکثر کدهای C می توانند به راحتی در C++ به درستی کامپایل شوند، اما چند تفاوت وجود دارد که باعث می شود برخی از کدهای C معتبر نامعتبر باشند یا در C++ متفاوت رفتار کنند. به عنوان مثال، C اجازه می دهد تا تبدیل ضمنی از انواع اشاره گر دیگر را انجام دهد، اما C++ اجازه نمی دهد (به دلایل ایمنی نوع). همچنین، C++ بسیاری از کلیدواژههای جدید مانند و را تعریف میکند که ممکن است به عنوان شناسه (مثلاً نام متغیرها) در برنامه C استفاده شوند. void*newclass
برخی از ناسازگاری ها با تجدید نظر در سال 1999 استاندارد C ( C99 ) حذف شده اند، که اکنون از ویژگی های C++ مانند نظرات خط ( //) و اعلان های مخلوط ++ ++ (++ )، [90] ++، ++::(). [91] [92] [93] ++++، ++ /() “” {/*…*/}
: ++
++ [94] [95] [96] [97] [98] [99] [100]
++ ++ :
++ ً ++: «++ » (++ )، “++” “”: [99] [100]
++ ++ “”.
فهرست مطالب