# برمجة سي/نسخة جاهزة للطباعة

الإصدار الحالي القابل للتحرير من هذا الكتاب متاح في ويكي الكتب، مجموعة الكتب ذات المحتوى المفتوح، على
https://ar.wikibooks.org/wiki/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9_%D8%B3%D9%8A

# لماذا تتعلم لغة البرمجة سي؟

سي هي لغة البرمجة الأكثر استخدامًا لتصميم وتطوير أنظمة التشغيل بشكل عام. كان أول نظام تشغيل يطور بلغة السي هو نظام يونكس. كُتبت أيضًا نُظم التشغيل اللاحقة مثل جنو ولينكس بلغة البرمجة سي، ولكن لا تقتصر لغة البرمجة سي على تطوير أنظمة التشغيل فحسب، بل هي أيضًا تعد المُلهمة والأساس للغات عالية المستوى الأكثر شيوعًا المتواجدة اليوم. في الواقع، صُممت وطورت لغات البرمجة بيرل وبي إتش بي وبايثون وروبي بلغة البرمجة سي.
على سبيل القياس، لنفترض أنك ستتعلم الإسبانية أو الإيطالية أو الفرنسية أو الرومانية. هل تعتقد أن معرفة اللغة اللاتينية سيكون مفيدًا؟ تمامًا كما كانت اللاتينية أساس كل تلك اللغات، فإن معرفة لغة البرمجة سي ستمكنك من فهم وتقدير عائلة كاملة من لغات البرمجة المبنية على أساس اللغة سي، حيث تتيح معرفتك بللغة سي الحرية.

### لماذا اللغة سي وليس لغة المُجمع؟

السبب الأكبر لتعلم لغة البرمجة سي بدلًا من لغة المُجمع، هو أنه من الأسهل والأسرع كتابة الكود في اللغة سي مقارنة بلغة المُجمع لمهمة برمجة معينة. حيث أنه بإستخدام اللغة سي، ستكتب عددًا أقل بكثير من سطور التعليمات البرمجية، وستكمل المهمة بشكل أسرع بكثير، وبجهد عقلي أقل بكثير مما لو كتبته في لغة المُجمع. ومع المُجمعات والمترجمات الحديثة اليوم، فإن الملفات القابلة للتنفيذ التي تم تجميعها من الكود المصدري للغة سي ستعمل عادةً أسرع من الملفات المكتوبة "يدويًا" باستخدام لغة المُجمع. فقط في بعض الحالات النادرة، وفقط إذا كنت تعرف حقًا ما تفعله، يمكن أن توفر لغة المُجمع مزايا سرعة مهمة بدلاً من أكواد اللغة سي الذي تم تجميعه باستخدام مترجم لائق.
ومع اللغة سي، لا يتعين عليك التضحية بالكثير من مستوى التحكم المنخفض التي تنشده في كيفية تنفيذ التعليمات البرمجية الخاصة بك. تُترجم عادة جمل وعبارات اللغة البرمجية سي بشكل نموذجي إلى عدد قليل من تعليمات المُجمع. لكن اللغة سي توفر لك أيضًا مكتبة برمجية كبيرة لمساعدتك في تنفيذ المهام ذات المستوى المنخفض التي تُفضل عدم التعامل معها في البرمجة.
ميزة كبيرة أخرى للغة سي هي قابلية النقل. المعالجات المركزية المختلفة لها مجموعات تعليمات مختلفة. إن الحاجة إلى إعادة كتابة أكواد لغة المُجمع وتحسينها لكل بنية كمبيوتر ترغب في تنفيذ التعليمات البرمجية عليها مهمة شاقة. ومن ثم فإن إحدى نقاط القوة الرئيسية للغة سي هي أنها تجمع بين العالمية وقابلية النقل عبر بنى أجهزة الكمبيوتر المختلفة بينما لا تزال تمنحك نفس النوع من التحكم في الأجهزة منخفض المستوى الذي تحصل عليه من خلال لغة المُجمع. هذا يعني أنه يمكنك كتابة التعليمات البرمجية المصدرية للغة سي مرة واحدة وتجميعها بسهولة في ملف ثنائي لاستخدامها على مجموعة متنوعة من الأجهزة.
على سبيل المثال، يمكن تجميع برامج اللغة سي وتشغيلها على الآلة الحاسبة أتش بي 50جي (معالج إيه آر إم)، والآلة الحاسبة تي آي-89 (معالج 68000) ، وهواتف بالم أو إس كوبليت الذكية (معالج إيه آر إم) ، وأجهزة آي ماك الأولية (باور بي سي) ، وآردوينو (أتمل أيه في آر) وأجهزة آي ماك العاملة بمعالجات أنتل (أنتل كور 2 دول). كل من هذه الأجهزة لها مُجمعها الخاص الذي لا يتوافق تمامًا مع مُجمع آي جهاز آخر. تُمكنك لغة البرمجة سي من تشغيل التعليمات البرمجية الخاصة بك على هذه الأجهزة بجهد أقل بكثير.
فهل من المستغرب أن لغة سي هي لغة شائعة؟
مثل تساقط الدومينو، يتبع الجيل القادم من البرامج اتجاه أسلافه. تحتوي أنظمة التشغيل المُصممة في لغة سي دائمًا على مكتبات نظام مُصممة في لغة سي. تُستخدم مكتبات النظام هذه بدورها لإنشاء مكتبات برمجية ذات مستوى أعلى (مثل أوبن جي إل، أو جتك)، وغالبًا ما يقرر مصممو هذه المكتبات استخدام اللغة التي تستخدمها المكتبات البرمجية للنظام حيث يستخدم مطورو التطبيقات المكتبات عالية المستوى لتصميم برامج معالجة الكلمات والألعاب ومشغلات الوسائط وما شابه. سيختار الكثير منهم البرمجة باللغة التي تستخدمها المكتبة البرمجية من المستوى الأعلى، وهكذا يستمر النمط مرارًا وتكرارًا...
بالرغم من ذلك، يمكن أن يكون تعلم لغة المُجمع ممتعًا وجديرًا بالاهتمام لأنه يمكن أن يمنحك فهمًا عميقًا لكيفية عمل جهاز الحاسوب الخاص في المستويات المنخفضة جدًا. وسيساعدك تعلم لغة المُجمع بالتأكيد على أن تصبح مبرمجًا أكثر مهارة بلغة سي، ولذلك نحن نُشجعك على تعلم لغة المُجمع بكل الطرق الممُكنة، ولكن عندما يحين وقت القيام بعمل حقيقي، سترغب بالتأكيد في إنجازه باستخدام لغة سي.

### لماذا اللغة سي وليس لغة أخرى؟

الغرض من التصميم الأساسي للغة سي هو إنتاج كود محمول مع الحفاظ على الأداء وتقليل البصمة بقدر الإمكان (وقت الحوسبة، استخدام ذاكرة الحاسوب، عمليات القرص الصلب، إلخ.). هذا الأمر مفيد لنظم التشغيل أو الأنظمة المدمجة أو غيرها من البرامج التي يكون للأداء فيها أهمية كبيرة (حيث وجود الواجهة “عالية المستوى" ستؤثر على الأداء). باستخدام لغة سي، من السهل نسبيًا الاحتفاظ بصورة ذهنية لما يفعله سطر معين حقًا، لأن معظم الأشياء مكتوبة بشكل صريح في الكود. تحتوي لغة سي على قاعدة بيانات كبيرة للتطبيقات منخفضة المستوى. وهي اللغة "الأم" لنظام يونكس، مما يجعلها مرنة ومحمولة. لغة سي مستقرة وناضجة ومن غير المرجح أن تختفي لفترة طويلة وقد تم نقلها إلى معظم إن لم يكن كل المنصات.
أحد الأسباب القوية هو تخصيص الذاكرة. على عكس معظم لغات البرمجة ، تسمح لغة سي للمبرمج بالكتابة مباشرة على الذاكرة. تم تصميم التركيبات الرئيسية في لغة سي مثل الهياكل والمؤشرات والمصفوفات لبناء الذاكرة ومعالجتها بطريقة فعالة ومستقلة عن الآلة. بشكل مخصوص، تمنحك لغة سي إمكانية التحكم في تخطيط الذاكرة لهياكل البيانات. علاوة على ذلك، يخضع تخصيص الذاكرة الديناميكي لسيطرة المبرمج (مما يعني أيضًا أن إلغاء تخصيص الذاكرة يجب أن يتم بواسطة المبرمج). اللغات مثل جافا وبيرل تُعفي المبرمج من الحاجة إلى إدارة معظم تفاصيل تخصيص الذاكرة والمؤشرات (باستثناء تسرب الذاكرة وبعض الأشكال الأخرى من الإستخدام المفرط للذاكرة). يمكن أن يكون هذا مفيدًا لأن التعامل مع تخصيص الذاكرة عند إنشاء برنامج عالي المستوى عملية معرضة بشكل كبير للخطأ. ومع ذلك، عند التعامل مع كود منخفض المستوى مثل جزء من نظام التشغيل الذي يتحكم في الجهاز، توفر لغة سي واجهة موحدة ونظيفة. هذه الإمكانيات غير موجودة في معظم اللغات الأخرى.
في حين أن اللغات البرمجية بيرل وبي إتش بي وبايثون وروبي قد تكون قوية وتدعم العديد من الميزات التي لا يتم توفيرها افتراضيًا في لغة سي، إلا أنها لا تُطبَّق عادةً بلغتها الخاصة. بدلاً من ذلك، اعتمدت معظم هذه اللغات في البداية على كتابتها بلغة سي (أو لغة برمجة أخرى عالية الأداء)، وستتطلب نقل تنفيذها إلى نظام أساسي جديد قبل استخدامها.
كما هو الحال مع جميع لغات البرمجة، فإن ما إذا كنت ترغب في اختيار لغة سي على لغة أخرى عالية المستوى هو مسألة رأي ويمكن أن تُحدد المتطلبات الفنية والتجارية اللغة المطلوبة.

# التاريخ

بدأ مجال الحوسبة كما نعرفه اليوم في عام 1947 مع ثلاثة علماء في مختبرات بيل للهاتف - ويليام شوكلي ووالتر براتين وجون باردين - واختراعهم الرائد، الترانزستور وذلك في عام 1956، تم الانتهاء من تطوير أول كمبيوتر يعمل بالترانزستور بالكامل والمُسمي تي اكس-0، في معهد ماساتشوستس للتكنولوجيا. تم إنشاء أول دارة متكاملة في عام 1958 بواسطة جاك كيلبي في شركة تكساس إنسترومنتس، ولكن من ناحية أخرى تواجدت أول لغة برمجة عالية المستوى قبل ذلك.
تم تطوير مشروع فورتران أو "نظام آي بي إم لترجمة الصيغ الرياضية" في عام 1954 بواسطة شركة آي بي إم. ((بالإنجليزية: The IBM Mathematical Formula Translating System) = Fortran)، كان الغرض من المشروع هو إنشاء وتبني تطوير لغة برمجة إجرائية إلزامية مناسبة بشكل خاص للحسابات الرقمية والحوسبة العلمية. كانت فورتران طفرة من حيث الإنتاجية وسهولة البرمجة (مقارنة بلغة المُجمع) والسرعة (كانت برامج فورتران تعمل بسرعة تقارب، وفي بعض الحالات، بنفس سرعة البرامج المكتوبة في لغة المُجمع). علاوة على ذلك، تمت كتابة لغة فورتران بمستوى عالٍ بدرجة كافية (وبالتالي كانت مستقلة عن الآلة بدرجة كافية) لتصبح أول لغة برمجة مُعتمدة على نطاق واسع. تم اشتقاق اللغة الخوارزمية (خوارزم 58) من لغة فورتران في عام 1958 وتطورت إلى خوارزم 60 في عام 1960. ثم تم إنشاء لغة البرمجة المدمجة (سي بي إل) من خوارزم 60 في عام 1963. وفي عام 1967، تطورت إلى لغة البرمجة الأساسية المختلطة (بي سي بي إل) ، والتي كانت الأساس للغة البرمجة بي والذي تم تدشينها في عام 1971، حيث كانت بمثابة الأساس للغة سي.
تم إنشاء اللغة بي بواسطة كين تومسن في مختبرات بيل، وكان الإصدار بي عبارة عن نسخة مُجردة من بي سي بي إل والتي كانت أيضًا لغة مُجمعة (انظر الدليل للغة بي) أستخدمت في الإصدارات الداخلية المبكرة من نظام التشغيل يونكس. كما أشار دينيس ريتشي في تطويره للغة سي:
   لم يقم مترجم اللغة بي على بي دي بي-7 بإنشاء أية أكواد الآلة، ولكن بدلاً من ذلك يقوم بإنشاء "أكواد مترابطة"، وهي مخطط توضيحي تتكون فيه مُخرجات المترجم من سلسلة من عناوين أجزاء التعليمات البرمجية التي تؤدي العمليات الأولية. تعمل العمليات عادةً - خاصة بالنسبة للغة بي - على آلة مكدس بسيطة.
قام طومسون وريتشي بتحسين اللغة بي، وأسموا النتيجة "أن بي". الإمتدادات الأخرى المُضافة لـ "أن بي" أنشئت خلف اللغة بي المنطقي اللغة سي. تمت إعادة كتابة معظم نظام يونكس في "أن بي" ثم اللغة سي لاحقًا، مما أدى إلى نظام تشغيل أكثر قابلية للنقل. كانت قابلية نقل يونكس هي السبب الرئيسي للشهرة الأولية لكل من نظام التشغيل يونكس واللغة سي. بدلاً من إنشاء نظام تشغيل جديد لكل جهاز جديد، يمكن لمبرمجي النظام ببساطة كتابة الأجزاء القليلة المعتمدة على النظام المطلوبة للجهاز، ثم كتابة مترجم للغة سي للنظام الجديد، ونظرًا لأن معظم أدوات النظام تمت كتابتها في سي، فمن المنطقي أيضًا كتابة أية أدوات جديدة في نفس اللغة سي.
بدأ المعهد القومي الأمريكي للمعايير العمل على توحيد معايير اللغة سي في عام 1983، وأكمل عمله في عام 1989. كان المعيار المُسمي "ANSI X3.159-1989 - لغة البرمجة سي" ، بمثابة الأساس لجميع مترجمات اللغة سي. تم تحديث المعايير لاحقًا في عامي 1990 و1999، مما سمح بالميزات التي كانت إما شائعة الاستخدام أو كانت تظهر في اللغة سي++.

# ما تحتاجه قبل أن تتعلم
## البدء

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

### المهارات والخبرة السابقة التي ستحتاجها

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

### البرامج التي ستحتاجها

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

###### المترجم

المترجم هو برنامج معقد لتحويل أكواد لغة سي الذي تكتبها باستخدام محرر النصوص الخاص بك إلى ملف لغة الآلة والتي يُمكنك تنفيذها على جهاز الكمبيوتر الخاص بك. يوجد أدناه قائمة ببعض المترجمات المشهورة للغة سي. لاحظ أن بعض المترجمات المدرجة أدناه تأتي كجزء من بيئة التطوير المتكاملة (IDE). ومع ذلك، إذا كنت جديدًا في البرمجة، فمن الأفضل أن تتمكن من تثبيت وتشغيل المترجم من سطر الأوامر بدلاً من برامج بيئة التطوير المتكاملة. يستخدم هذا الكتاب مترجم جنو لغة سي (بالإنجليزية: GNU C Compiler) في الأمثلة لذلك نوصي بتثبيت هذا المترجم لاستخدامه مع هذا الكتاب. سيشرح القسم التالي في هذا الفصل كيفية تنزيل هذا المُترجم وتثبيته على جهازك.
المترجمات المشهورة للغة سي/يتضمن أيضًا برامج بيئة التطوير المتكاملة:
| الأسم | الموقع | المنصة | الترخيص | التفاصيل |
| مايكروسوفت فيجوال ستوديو كوميونيتي | فيجوال ستوديو | الويندوز | ملكية، بدون مقابل | إصدار قوي وسهل للطلاب من مترجم قياسي. |
| إكس كود | إكس كود | ماك أو إس | ملكية، بدون مقابل | متوفر مجانًا في متجر تطبيقات الماك. |
| مترجم سي المصغر (TCC) | مترجم سي مصغر | جنو/لينكس، الويندوز | رخصة جنو العمومية الصغرى | مترجم صغير وسريع وبسيط. |
| كلانج | كلانج | جنو/لينكس، ويندوز، يونكس، ماك أو إس | جامعة إلينوي/رخصة إن سي أس أيه | واجهة أمامية مجانية ومرخصة بشكل مسموح والتي تستخدم أدوات إل إل في إم (بالإنجليزية: LLVM). |
| مترجم جنو لغة سي | جنو سي سي | MinGW لـ جنو ولينكس أو mingw-w64 لكلاً من الويندوز، يونكس، ماك أو إس. | رخصة جنو العمومية | الأساسي بحكم الأمر الواقع. يأتي مُضمنًا مع معظم الأنظمة الشبيهة بـ يونكس. |

###### محررات النصوص وبيئات التطوير المتكاملة

بغض النظر عن المُترجم، فإن مُتطلبات البرنامج الأخرىَ الوحيدة هي مُحرر النصوص لكتابة وحفظ كود اللغة سي الخاص بك. لاحظ أن مُحرر النصوص يختلف عن مُعالج الكلمات، وهو برنامج يحتوي على العديد من الميزات لإنشاء المستندات الجذابة بصريًا. على عكس معالجات الكلمات، تم تصميم برامج تحرير النصوص بشكل أساسي لإنشاء ملفات نصية عادية. في نظام الويندوز، يمكنك استخدام محرر النصوص نوت-باد، ولكنه لا يقدم أي إمكانيات متقدمة مثل تعليم الصيغة وإكمال الأكواد البرمجية. هناك المئات من برامج تحرير النصوص (راجع قائمة محررات النصوص). من أشهرها نوتباد++ لنظام التشغيل ويندوز وكذلك أتوم، سابليم تكست، جي إديت و فيم و إيماكس والتي يُمكنك تحميلها على أنظمة التشغيل الأخرى ("متعددة المنصات"). تأتي محررات النصوص هذه مع تعليم الصيغة وأرقام الأسطر، مما يسهل قراءة الأكواد البرمجية في لمح البصر، واكتشاف أخطاء الأكواد. يحتوي العديد من محرري النصوص على ميزات لزيادة سرعة التكويد، مثل وحدات الماكرو المحددة للمفاتيح والأكواد البرمجية الجاهزة، والتي يمكنك الاستفادة منها عندما تكتسب المهارة كمبرمج.
قد تفكر أيضًا في استخدام بيئة تطوير متكاملة (IDE) لمساعدتك في كتابة التعليمات البرمجية. بيئة التطوير المتكاملة عبارة عن مجموعة من الأدوات والميزات المدمجة في حزمة واحدة ملائمة، وعادة ما تكون مع واجهة مستخدم رسومية. تتضمن هذه البرامج محرر نصوص ومستعرض ملفات، كما يتم أحيانًا تجميعها مع مترجم يَسهل الوصول إليه. كما أنها تتضمن عادةً مُصحح أخطاء، وهي أداة ستمكنك من القيام بأشياء مثل الخطو خلال البرنامج الذي تقوم بتطويره يدويًا سطر كود مصدر بسطر، أو بتغيير البيانات كمساعدة في العثور على الأخطاء البرمجة وتصحيحها.
ومع ذلك، فإن العديد من بيئات التطوير المتكاملة لا تقدم واجهة سطر أوامر للمترجم أو تقدم فقط أزرار رسومية أو قائمة لتنفيذ البرامج. لذلك بالنسبة للمبرمجين الجدد، فإن بيئة التطوير المتكاملة ليس مثالية. بدلاً من ذلك، سيكون محرر النصوص بسيط بشكل كافي إلى جانب القدرة على إصدار أوامر بسيطة في سطر الأوامر لمساعدتك على اكتساب المعرفة العملية وفهم أدوات التطوير الأساسية. بالطبع، قد تظل بيئة التطوير المتكاملة مفيدة لك إذا كانت لديك خبرة في إحداها. ولكن كمبدأ عام: لا تستخدم بيئة التطوير المتكاملة إلا إذا كنت تعرف ما تفعله بيئة التطوير المتكاملة من أجلك!
المترجمات المشهورة/برامج بيئة التطوير المتكاملة:
| الأسم | الموقع | المنصة | الترخيص | التفاصيل |
| إكلبس | إكلبس | ويندوز، ماك أو إس، جنو/لينكس | مجاني أو حر ومفتوح المصدر | إكلبس لتطوير سي/سي ++، وهو بيئة تطوير متكاملة مشهورة مفتوحة المصدر. |
| نت بينز | نت بينز | منصات-متعددة | رخصة التطوير والتوزيع المشترك و رخصة جنو العمومية 2.0 | بيئة تطوير متكاملة بشكل جيد بالمقارنة مع إكلبس. |
| جنوم بيلدر | جنوم بيلدر | جنو/لينكس | رخصة جنو العمومية | بيئة تطوير متكاملة غنية بالميزات ولكنها بسيطة لبيئة نظام جنوم. |
| أنجوتا | أنجوتا | جنو/لينكس | رخصة جنو العمومية | بيئة تطوير متكاملة اعتمادًا على جتك + 3 قابلة للتوسيع لبيئة نظام جنوم. |
| جيني | جيني | منصات-متعددة | رخصة جنو العمومية | A lightweight cross-platform GTK+ notepad based on Scintilla, with basic IDE features. |
| KDevelop | KDevelop | Cross-platform | GPL | A cross-platform IDE for the KDE project. |
| Little C Compiler (LCC) | lcc | Windows | Open Source but not Libre | Small open source compiler. |
| Pelles C | Pelles C | Windows, Pocket PC | Proprietary, free of charge | A complete C development kit for Windows. |
| ديف سي++ | Dev C++ | Windows | GPL | Updated version of the formerly popular Bloodshed Dev-C++. |
| CodeLite | CodeLite | Cross-platform | GPL 2 | Free IDE for C/C++ development. |
| Code::Blocks | Code::Blocks | Cross-platform | GPL 3.0 | Built to meet users' most demanding needs. Very extensible and fully configurable. |
في جنو/لينكس، يتم تضمين جنو سي سي (مترجم جنو لغة سي - (بالإنجليزية: GNU C Compiler)) دائمًا تقريبًا.
في مايكروسوفت ويندوز، يوصى باستخدام ديف سي++ للمبتدئين لأنه سهل الاستخدام ومجاني وسهل التثبيت. على الرغم من أن المطور الأول (أسمه:Bloodshed) لم يحدّثه منذ 2005، ظهرت نسخة جديدة في 2011، يطورها (أسمه:Johan Mes)، توقف تطوير هذه النسخة بعام 2020. بدأت الشركة امباركاديرو تكنولوجيز بتطوير النسخة الثالثة والأخيرة حاليًا من البرنامج من العام 2020 إلى الوقت الحالي. خيار بديل لأولئك الذين يعملون فقط في بيئة ويندوز هو فيجوال ستوديو كوميونيتي وهو مجاني ويحتوي على مصحح أخطاء ممتاز.
في نظام الماك، توفر بيئة التطوير المتكاملة "إكس كود" المجمعات اللازمة لتجميع ملفات المصدر المختلفة. لا تتضمن الإصدارات الأحدث أدوات سطر الأوامر. يجب تنزيلها عبر إكس كود-> التفضيلات-> التنزيلات.

## المراجع

* ↑ في الحقيقة، جنو سي سي (مترجم جنو لغة سي - (بالإنجليزية: GNU C Compiler)) سي سي (مترجم سي - (بالإنجليزية: C Compiler)) يترجم الملف المُدخل بصيغة .c إلى لغة المُجمع الخاصة بالمعالج المركزي، يأتي المُخرج بملف بصيغة .s . ومن ثم يقوم المُجمع بإنشاء أكواد لغة الآله من الملف .s . تتم المعالجة المسبقة بواسطة برنامج فرعي آخر سي بي بي (المعالج المُسبق لسي - (بالإنجليزية: C PreProcessor)).
* ↑ http://www.bloodshed.net/
* ↑ http://orwelldevcpp.blogspot.com/
* ↑ https://www.embarcadero.com/free-tools/dev-cpp

# Obtaining a Compiler

C Programming/Obtaining a compiler

# Intro Exercise

C Programming/Intro exercise

# Preliminaries

C Programming/Preliminaries

# Basics of Compilation

C Programming/Basics of compilation

# Programming Structure and Style

C Programming/Structure and style

# Variables

C Programming/Variables

# Simple Input and Output

C Programming/Simple input and output

# Operators and type casting

C Programming/Operators and type casting

# Arrays and Strings

C Programming/Arrays and strings

# Program Flow Control

C Programming/Program flow control

# Procedures and Functions

C Programming/Procedures and Functions

# Standard Libraries

C Programming/Standard libraries

# Beginning exercises

C Programming/Beginning exercises

# Advanced Data Types

C Programming/Advanced data types

# Pointers and Relationship to Arrays

C Programming/Pointers and arrays

# Memory Management

C Programming/Memory management

# Error Handling

C Programming/Error handling

# File I/O

C Programming/File IO

# String Manipulation

C Programming/String manipulation

# Further Math

C Programming/Further math

# Libraries

C Programming/Libraries

# Common Practices

C Programming/Common practices

# Preprocessor Directives and Macros

C Programming/Preprocessor directives and macros

# Sockets and Networking (UNIX)

C Programming/Networking in UNIX

# Serialization and X-Macros

C Programming/Serialization

# Coroutines

C Programming/Coroutines

# Particularities of C

C Programming/Particularities of C

# C Trigraph

C Programming/C trigraph

# Language Overloading and Extensions

C Programming/Language overloading and extensions

# Combining Languages

C Programming/Mixing languages

# Object Oriented Programming: The GObject System

C Programming/GObject

# Computer Programming

The following articles are C adaptations from articles of the Computer programming book.

# Statements

C Programming/Statements

# Reference Tables

This section has some tables and lists of C entities.

# Standard Library Reference

C Programming/Standard library reference

# Language Reference

C Programming/Language Reference

# Platform Reference

C Programming/Platform reference

# POSIX Reference

C Programming/POSIX Reference

# GNU C Library Reference

C Programming/GNU C Library Reference

# MS Windows Reference

C Programming/MS Windows Reference

# C Compilers Reference List

C Programming/C Compilers Reference List