سی (زبان برنامه نویسی)

context: سی (به انگلیسی: C، ‎/siː/‎) یک زبان برنامه‌نویسی از نوع همه‌منظوره، کامپایل‌شونده، سطح میانی، ساخت‌یافته، دستوری و روندگرا می‌باشد که در سال ۱۹۷۲ توسط دنیس ریچی در آزمایشگاه‌های بل ساخته شد. در سال ۱۹۶۷ مارتین ریچاردز زبان BCPL را برای نوشتن نرم‌افزارهای سیستم‌عامل و کامپایلر در دانشگاه کمبریج ابداع کرد. سپس در سال ۱۹۷۰ کن تامسون زبان B را بر مبنای ویژگی‌های زبان BCPL نوشت و از آن برای ایجاد اولین نسخه‌های سیستم‌عامل یونیکس در آزمایشگاه‌های بل استفاده کرد. زبان C در سال ۱۹۷۲ توسط دنیس ریچی از روی زبان B و BCPL در آزمایشگاه بل ساخته شد و ویژگی‌های جدیدی همچون نظارت بر نوع داده‌ها نیز به آن اضافه شد. ریچی از این زبان برای ایجاد سیستم‌عامل یونیکس استفاده کرد اما بعدها اکثر سیستم‌عامل‌های دیگر نیز با همین زبان نوشته شدند. این زبان با سرعت بسیاری گسترش یافت و چاپ کتاب "The C Programming Language" در سال ۱۹۷۸ توسط برایان کرنیگان و ریچی باعث رشد روزافزون این زبان در جهان شد.
qas: answers: text: یک زبان برنامه‌نویسی از نوع همه‌منظوره، کامپایل‌شونده، سطح میانی، ساخت‌یافته، دستوری و روندگرا می‌باشد
question: برنامه سی چیست؟

answers: text: ۱۹۷۲
question: سی در چه سالی توسط دنیس ریچی ساخته شد؟

answers: text: دنیس ریچی
question: سی در سال ۱۹۷۲ توسط چه کسی در آزمایشگاه‌های بل ساخته شد؟

answers: text: آزمایشگاه‌های بل
question: سی در سال ۱۹۷۲  توسط دنیس ریچی در کجا ساخته شد؟

question: برایان کرنیگان در کدام کشور می‌زیست؟

context: مانند بسیاری از زبان‌های رویه‌ای در سنت الگول، سی دارای امکاناتی برای برنامه‌نویسی ساخت یافته است و دامنهٔ متغیر واژگان را امکان‌پذیر می‌سازد. سیستم نوع استاتیک آن از انجام عملیات ناخواسته جلوگیری می‌کند. در C، کلیهٔ کدهای اجرایی در زیر برنامه‌ها (که «توابع» نیز نامیده می‌شوند وجود دارد، گرچه به معنای برنامه‌نویسی کاربردی کاملاً دقیق نیست). پارامترهای عملکرد همیشه توسط مقدار منتقل می‌شوند. گذر توسط مرجع در C با عبور صریح مقادیر اشاره‌گر شبیه‌سازی می‌شود. متن منبع برنامهٔ C با فرمت آزاد است و با استفاده از دکتر کلمات به عنوان یک اصطلاح کننده بیان و بندهای فرفیژه برای گروه‌بندی جمله‌ها استفاده می‌شود.
qas: answers: text: سنت الگول
question: برنامه سی جزو زبان‌های رویه‌ای چیست؟

answers: text: امکاناتی برای برنامه‌نویسی ساخت یافته
question: برنامه سی دارای چه امکاناتی است؟

answers: text: از انجام عملیات ناخواسته
question: در برنامه سی سیستم نوع استاتیک آن از چه چیزی جلوگیری می‌کند؟

answers: text: توابع
question: کلیهٔ کدهای اجرایی در زیر برنامه ها چه نامیده می‌شوند؟

question:  بندهای فرفیژه در برنامه سی چیست؟

context: بسیاری از زبان‌های بعدی به‌طور مستقیم یا غیرمستقیم از C وام گرفته‌اند، از جمله C ++ , C #، C , Unix's C shell , D، Go , Java , JavaScript (از جمله ترانسپلرها)، Limbo , LPC , Objective-C، Perl , PHP , Python , Rust, Swift, Verilog و SystemVerilog (زبان‌های توصیف سخت‌افزار). این زبان‌ها بسیاری از ساختارهای کنترلی خود و سایر ویژگی‌های اصلی را از C ترسیم کرده‌اند. بیشتر آن‌ها (پایتون یک استثناء چشمگیر) نیز نحو کاملاً مشابهی را با C نشان می‌دهند، و آن‌ها تمایل دارند ترکیب و نحو قابل تشخیص C را با نوع زیرین ترکیب کنند. سیستم‌ها، مدل‌های داده‌ها و معنایی که می‌توانند تفاوت چشمگیری با یکدیگر داشته باشند.
qas: answers: text: زبان‌های توصیف سخت‌افزار
question: کدام برنامه به‌طور مستقیم و یا غیرمستقیم از برنامه سی وام گرفته‌است؟

answers: text: بسیاری از ساختارهای کنترلی خود و سایر ویژگی‌های اصلی
question: زبان‌های توصیف سخت‌افزار چه چیزی را از طریق برنامه سی ترسیم کرده‌اند؟

answers: text: پایتون
question: کدام برنامه یک استثنا چشمگیر در مشابهت با برنامه سی دارد؟

question: برنامه پایتون چگونه کار می‌کند؟

context: تامپسون یک زبان برنامه‌نویسی را برای ایجاد برنامه‌های کاربردی برای سیستم عامل جدید می‌خواست. در ابتدا، او سعی کرد تا کامپایلر Fortran بسازد، اما خیلی زود این ایده را رها کرد. در عوض، او یک نسخه برش خورده از زبان برنامه‌نویسی سیستم‌های BCPL که اخیراً توسعه یافته بود، ایجاد کرد. توضیحات رسمی BCPL در آن زمان موجود نبود و تامپسون نحو (syntax) را اصلاح و کم‌حرف‌تر و B را مشابه اما کمی ساده‌تر تولید می‌کند با این حال، کمترین ابزارها نهایتاً در B نوشته شدند زیرا خیلی کند بود و B نمی‌توانست از ویژگی‌های PDP-11 مانند آدرس پذیری بایت بهره ببرد.
qas: question: تامپسون کیست؟

answers: text: یک زبان برنامه‌نویسی را برای ایجاد برنامه‌های کاربردی برای سیستم عامل جدید می‌خواست
question: تامپسون چه چیزی می‌خواست؟

answers: text: کم‌حرف‌تر
question: تامپسون برنامه نحو را چگونه تولید کرد؟

answers: text: مشابه اما کمی ساده‌تر
question: تامپسون برنامه بی را چگونه تولید کرد؟

question: تامپسون در کجا زندگی می‌کرد؟

context: یکی از مهم‌ترین قابلیت‌های زبان C، امکان استفاده از اشاره‌گرهاست. اشاره‌گرها کارایی، قدرت و انعطاف‌پذیری برنامه را بیشتر می‌نمایند. علاوه بر فراهم آوردن امکان نوشتن کدهای برنامهٔ کوتاه‌تر، غنی‌تر و کاراتر، گاهی مواردی پیش می‌آید که انجام محاسبات مورد نیاز برنامه تنها توسط اشاره گرها امکان‌پذیر می‌باشد. به همین دلیل، از این توانایی در برنامه‌های C زیاد استفاده می‌گردد. اگر چه در ظاهر کار با اشاره‌گرها مشکل است و درک برنامه‌ای که از آنها استفاده شده‌است ساده نیست، اما در حقیقت اگر از آنها به درستی استفاده گردد، وضوح و سادگی برنامه افزایش می‌یابد.
qas: answers: text: امکان استفاده از اشاره‌گرهاست
question: یکی از مهم‌ترین قابلیت‌های زبان چیست؟

answers: text: کارایی، قدرت و انعطاف‌پذیری برنامه را بیشتر می‌نمایند
question: اشاره‌گرها در زبان سی چه می‌کنند؟

answers: text: اشاره‌گرها
question: با استفاده از چه چیزی در زبان سی وضوح و سادگی برنامه افزایش می‌یابد؟

answers: text: اشاره گرها
question: در مورد انجام انواع محاسبات در زبان سی تنها توسط چه چیزی امکان‌پذیر است؟

question: نام برنامه‌های زبان که در حال حاضر دیگر از آنها استفاده نمی‌شود را بنویسید؟

context: این سه رویکرد در موقعیتهای مختلف مناسب است و دارای تبعات مختلفی است. به عنوان مثال، تخصیص حافظه استاتیک اختصاص کمی به سربار دارد، تخصیص خودکار ممکن است کمی بیشتر از سربار باشد و تخصیص حافظه پویا به‌طور بالقوه می‌تواند مقدار زیادی از سربار را برای تخصیص و جابجایی داشته باشد. ماهیت پایدار اشیاء استاتیک برای حفظ اطلاعات حالت در طول فراخوانی‌های عملکردی مفید است، تخصیص خودکار به راحتی قابل استفاده است اما فضای پشته معمولاً بسیار محدودتر و گذرا از حافظه استاتیک یا فضای پشته است و تخصیص حافظه پویا امکان تخصیص مناسب اشیاء را می‌دهد که اندازه فقط در زمان اجرا شناخته شده‌است. بیشتر برنامه‌های C از هر سه مورد استفاده گسترده‌ای می‌کنند.
qas: answers: text: اختصاص کمی به سربار دارد
question: تخصیص حافظه استاتیک نسبت به سربار در زبان برنامه‌نویسی چگونه است؟

answers: text: ممکن است کمی بیشتر از سربار باشد
question: تخصیص خودکار نسبت به سربار در زبان برنامه‌نویسی چگونه است؟

answers: text: به‌طور بالقوه می‌تواند مقدار زیادی از سربار را برای تخصیص و جابجایی داشته باشد
question: تخصیص حافظه پویا نسبت به سربار در زبان برنامه‌نویسی چگونه است؟

answers: text: برای حفظ اطلاعات حالت در طول فراخوانی‌های عملکردی
question: ماهیت پایدار اشیاء استاتیک در زبان برنامه‌نویسی برای چه مفید است؟

question: تخصیص حافظه استاتیک در زبان برنامه نویسی چیست؟

context: در صورت امکان، تخصیص اتوماتیک یا استاتیک معمولاً ساده‌ترین است زیرا ذخیره‌سازی توسط کامپایلر اداره می‌شود، و برنامه‌نویس را از روی خطای بالقوه خطا در اختصاص و آزاد سازی فضای ذخیره‌سازی آزاد می‌کند. با این وجود بسیاری از ساختارهای داده می‌توانند در زمان اجرا تغییر کنند و از آنجا که تخصیص استاتیک (و تخصیص خودکار قبل از C99) باید در زمان کامپایل اندازه ثابت داشته باشد، موقعیت‌های بسیاری وجود دارد که تخصیص پویا لازم است. قبل از استاندارد C99، آرایه‌های اندازه متغیر نمونه متداول این امر بودند. (به عنوان مثال از آرایه‌های اختصاص داده شده پویا به مقاله در مورد malloc مراجعه کنید) برخلاف تخصیص خودکار، که می‌تواند در زمان اجرا با عواقب کنترل نشده از کار بیفتد، عملکردهای تخصیص پویا هنگام ذخیره‌سازی مورد نیاز، نشانه (به صورت مقدار اشاره گر تهی) را برمی‌گردانند. نمی‌توان اختصاص داد (قبل از اینکه برنامه حتی بتواند اجرای آن را شروع کند، معمولاً توسط لینک دهنده یا لودر تشخیص داده می‌شود)
qas: answers: text: کامپایلر
question: در زبان برنامه‌نویسی ذخیره‌سازی توسط چه اداره می‌شود؟

answers: text: ذخیره‌سازی
question: کامپایلر چه چیزی را در زبان برنامه‌نویسی اداره می‌کند؟

answers: text: ثابت
question: تخصیص استاتیک باید در زمان کامپایل چه اندازه‌ای داشته باشد؟

answers: text: لودر
question: لینک دهنده چیست؟

question: زمان کامپایل به چه معناست؟

context: مگر در مواردی که مشخص شده باشد، اشیاء استاتیک حاوی مقادیر نشانگر صفر یا تهی هنگام شروع برنامه هستند. اشیاء اختصاص داده شده به صورت خودکار و پویا فقط درصورتی تنظیم می‌شوند که مقدار اولیه صریحاً مشخص شود. در غیر این صورت آنها در ابتدا مقادیر مشخص نشده‌ای دارند (به‌طور معمول، هر الگوی بیتی که در آن ذخیره می‌شود، حتی ممکن است یک مقدار معتبر برای آن نوع نداشته باشد). اگر برنامه سعی کند به یک مقدار ناشناخته دسترسی پیدا کند، نتایج مشخص نیست. بسیاری از کامپایلرهای مدرن سعی در کشف و هشدار دربارهٔ این مشکل دارند، اما هم مثبت‌های کاذب و هم منفی کاذب می‌تواند رخ دهد.
qas: answers: text: مقدار اولیه صریحاً مشخص شود
question: اشیاء اختصاص داده شده به صورت خودکار و پویا فقط در چه صورتی تنظیم می‌شوند؟

answers: text: صفر یا تهی
question: اشیاء استاتیک در زمان اختصاص پیدا کردن در زمان شروع برنامه چه حاوی مقادیری از نشانگر هستند؟

answers: text: مقادیر مشخص نشده‌ای دارند
question: اشیاء اختصاص داده شده به صورت خودکار و پویا در صورت تنظیم نشدن در ابتدا چگونه‌اند؟

answers: text: تهی
question: نام دیگر نشانگر صفر چیست؟

question: تخصیص حافظه خودکار در زبان برنامه نویسی چیست؟

context: مسئله دیگر این است که تخصیص حافظه پشته باید با کاربرد واقعی آن در هر برنامه همگام سازی شود تا در استفاده مجدد از آن تا حد امکان استفاده شود. به عنوان مثال، اگر تنها اشاره گر برای تخصیص حافظه پنهان از محدوده خارج شود یا مقدار آن را قبل از بازنویسی بازنویسی کرده باشد () فراخوانی شود، پس از آن حافظه برای استفاده مجدد بعدی قابل بازیابی نیست و در اصل برای برنامه از بین می‌رود، پدیده ای معروف به a نشت حافظه در مقابل، امکان آزادسازی حافظه وجود دارد اما همچنان به آن مراجعه می‌شود و منجر به نتایج غیرقابل پیش‌بینی می‌شود. به‌طور معمول، علائم در بخشی از برنامه به دور از خطای واقعی ظاهر می‌شوند، و پیگیری مشکل را دشوار می‌کند. (چنین مواردی در زبانهایی که جمع‌آوری زباله‌های اتوماتیک دارند بهبود یافته‌است)
qas: answers: text: کاربرد واقعی آن در هر برنامه
question: تخصیص حافظه پشته باید در زبان بنامه نویسی باید با چه چیزی همگام سازی شود؟

answers: text: تا در استفاده مجدد از آن تا حد امکان استفاده شود
question: چرا باید تخصیص حافظه پشته کاربرد واقعی آن در هر برنامه همگام سازی شود؟

answers: text: حافظه برای استفاده مجدد بعدی قابل بازیابی نیست و در اصل برای برنامه از بین می‌رود
question: اگر تنها اشاره گر برای تخصیص حافظه پنهان از محدوده خارج شود چه اتفاقی می‌افتد؟

question: کدام زبان‌های برنامه‌نویسی دارای جمع‌آوری زباله‌های اتوماتیک هستند؟

context: زبان برنامه‌نویسی C از کتابخانه‌ها به عنوان روش اصلی توسعه آن استفاده می‌کند. در C، یک کتابخانه مجموعه ای از توابع موجود در یک پرونده «بایگانی» است. هر کتابخانه به‌طور معمول دارای یک فایل هدر است، که شامل نمونه‌های اولیه توابع موجود در کتابخانه است که ممکن است توسط یک برنامه مورد استفاده قرار گیرد، و اظهارات انواع داده‌های خاص و نمادهای کلان مورد استفاده با این توابع. برای اینکه یک برنامه از کتابخانه استفاده کند، باید پرونده سرصفحه کتابخانه را شامل شود، و کتابخانه باید با برنامه در ارتباط باشد، که در بسیاری موارد به پرچم‌های کامپایلر احتیاج دارد.
qas: answers: text: روش اصلی توسعه آن
question: زبان برنامه‌نویسی سی از کتابخانه‌ها به چه عنوان استفاده می‌کند؟

answers: text: مجموعه ای از توابع موجود در یک پرونده «بایگانی» است
question: در زبان برنامه‌نویسی سی یک کتابخانه چیست؟

answers: text: یک
question: هر کتابخانه در زبان برنامه‌نویسی سی دارای چند فایل هدر است؟

question: کاربرد پرچم‌های کامپایلر در زبان برنامه‌نویسی سی چیست؟