همان طور که گفتیم زبان های برنامه نویسی به سه دسته سطح پائین ، سطح بالا و خیلی سطح بالا تقسیم می شوند . زبان های سطح پائین به زبان ماشین و زبان اسمبلی تقسیم می شوند و زبان اسمبلی نیز خود به دو سطح پائین ( اصلی ) و بالا تقسیم بندی میشود .
زبان های سطح بالا ، بی شمار هستند اما بر اساس خصیصه های مختلفی شناسایی می شوند . زبان های '''دستورگرا''' یا خط-به-خط یا بهتر بگوئیم : کد-به-کد ، زبان هایی هستند که از اسمبلی الگو گرفته و هر کدی که نوشته شده را خط به خط و کد به کد ، دستور می دهند که در نهایت اجرا خواهد شد . درست در خلاف جهت زبان های دستوری ، زبان های '''موضوعی''' یا هدف گرا هستند که طی آن ، شما آن چه را که قرار است به عنوان خروجی صادر شود برای کامپایلر شرح می دهید ، کامپایلر ابتدا کل متن شما را میخواند و سپسس خروجی مورد نظر شما را صادر می کند . خصیصه های دیگری نیز در زبان های برنامه نویسی وجود دارند ، همچون ساختار گرایی که کدها را داخل بلوک هابلوکها می نویسید تا بتوانید آنها را از یک دیگر متمایز کرده و هر کدام را هر موقع که خواستید به کار بگیرید ( زبان C ساختار گراست ) یا مثلاً شیئ گرایی ، یکی دیگر از قابلیت های برنامه نویسی است که زبان سی شیئ گرا Objective-C را شامل می شود ، اما نه زبان سی را ؛ زبانشیئ گرایی قابلیتی از برنامهنویسی است که شما یک الگوی کامل از مجموعهای از بلوکهای تابعها و یا دادهها را تعریف میکند و میتوانید الگو را توسعه دهید و سپس از روی الگو نمونههایی میسازید که هر نمونه یک شیئ گرانامیده زبانیستمیشود و خواص الگوی خود را دارد که بخشیالبته هاییمیتوانید آنها را تغییر دهید . این قابلیت ( شیئگرایی ) باعث جلوگیری از برنامهاتلاف وقت میشود و به صورتجای جدااینکه ازهر یکدیگردادهای میرا توانندکه نوشتهبخواهید شوندبر روی آن پردازش انجام دهید ، امایک به یک تعریف کنید ؛ یک بار یک الگوی کامل با خصیصههایی تعریف میکنید و بعدسپس از نوشتهروی شدنآن میالگو تواننمونهها آنهایا درهمان درشیئها کناررا یکدیگرمیسازید قرارداد. تازبان C شیئگرا نیست و نزدیک به اسمبلی سطح بالا است ، اما با همزبان اجراسی به تمام شوندورودیها و ازخروجیها کدو نویسیگذرگاههای اضافهسیستم جلوگیریدسترسی میدارید شود، مخصوصاً که بیشتر عرضه کنندههای کامپایلرها قابلیت ترکیب کردن زبان سی با زبان اسمبلی را فراهم میآورند . می توان گفت که تمام خصلت هایی که برای برنامه نویسی های سطح بالا شمرده می شود تنها کمک به راحت تر نوشته شدن ( و البته فهم آسان تر آن برای برنامه نویس ) و صرفه جویی در وقت است .
هر برنامه ای که با زبان سطح بالا نوشته شود را می توان با زبان سطح پائین نیز نوشت ، اما هر برنامه ای که در زبان سطح پائین نوشته شده را نمی توان در زبان سطح بالا نوشت . اما وقتی زبان ها در سطح هم هستند به احتمال زیاد می توان آنها را به یکدیگر ترجمه نمود . شاید از عبارت ترجمه کمی تعجب کرده باشید ، بله ؛ زبان های برنامه نویسی را می توان توسط مبدل هامبدلها به یکدیگر ترجمه نمود . اما از آنجایی که ما در این کتاب قصد داریم تنها با زبان C کار کنیم به همین زبان می پردازیم ، جز اینکه در فصل ابتدایی مقدماتی را برای مبتدیان می نویسیممینویسیم تا آماده یاد گیری زبان C شده باشند .
چند بار از کلمه کامپایلر استفاده نمودیم . یک برنامه در یک فایل متنی با پیشوندپسوند متناسب زبان خود نوشته و ذخیره می شود و سپس توسط کامپایلر Compiler به کدهای قابل ترجمه توسط پردازشگر ماشین ( CPU ) و یا کرنل سیستم عامل ( Kernel ) تبدیل میشود . در اکثر مواقع ، ما در هنگام برنامه نویسی کدها را در چند فایل متنی می نویسیم . وقتی همه آنها را کامپایل نمودیم ، زمان آن می رسد تا توسط پیوند دهنده یا لینکر Linker به صورت یکپارچه در آورده شده و یک خروجی قابل اجرا به وجود بیاوریم . در ویندوز حتماً فایل های exe یا dll را دیده اید . همه این برنامه ها توسط زبانزبانهای های برنامه نویسیبرنامهنویسی نوشته شده و سپس توسط کامپایلر و لینکر تبدیل به برنامه قابل اجرا شده اندشدهاند . همچنین ممکن است شما در برنامه خود خطای مهلک یا خطای فاحش داشته باشید یا خطاهایی که می توانند برنامه شما را نامطلوب نمایند Bug ، در اینصورتی صورتکه قوانین استاندارد C را راعایت نکرده باشید ، کامپایلر ، برنامه شما را کامپایل یا ترجمه نخواهد نمود . در اینجا برنامه ای به نام اشکال زدااشکالزدا یا دیباگر Debugger برنامه ای که شما نوشته ایدنوشتهاید را میخواند و سپس به شما می گوید که در کدام قسمت هایقسمتهای آن اشکال هاییاشکالهایی وجود دارند که جلوی کامپایل شدن آن را میگیرند تا آنها را اشکال زدایی یا Debug نمائید . از طرفی ، گاهی اینکه مدام بنویسید و صبر کنید تا برنامه کامپایل و لینک شود و مدام اشکال زدایی کنید وقت گیر باشد ؛ برنامه هایی به نام مفسّر Interpretor وجود دارند که امکان اجرای متن برنامه شما را بدون تبدیل به کد سیستم عامل می دهند و در این صورت به سرعت هر تغییری که بخواهید اعمال می کنید و نتیجه آن را ارزیابی می نمائید .
زبان هایی مثل پرل Perl برای کامپایل شدن تعبیه نشده اند ، از همین روی برنامه های مفسّر ، فایلهای متنی این گونه زبان ها را می خوانند و به اجرا می گذارند و اگر بخواهید که از این زبان هازبانها برای نوشتن برنامه خود استفاده کنید باید این شرط برقرار گردد که کاربرکاربری که قصد استفاده از برنامه نوشتهشده شما را دارد نیز محیط اجرای کد شما را داشته باشد .
زمانی که شما برنامه ای را که نوشته اید را با موفقیت به خروجی رساندید ، برنامه شما تحت همان سیستم عاملی که نوشته ایدنوشتهاید قابل اجرا خواهد بود . بنابراین همان طور که قبلاً نیز گفتیم ، اکثربسیاری کامپایلراز هاکامپایلرها ، تحت سیستم عامل هستند و متن برنامه شما را به 0 و 1 ماشین تبدیل نمی کنند ، بلکه به کد های تحت سیستم عامل ترجمه می کنند تا در همان سیستم عامل ، مثلاً ویندوز اجرا گردند . بنابراین فایل های exe را سیستم عامل هایعاملهای مک Mac OS X به رسمیت نمی شناسند و ویندوز Microsoft Windows نیز فایل های dmg را به اجرا در نمی آورد . البته کامپایلرهای قدرتمند زبان C مثل Visual Studio از Microsoft و GCC از GNU قابلیت ترجمه به زبان ماشین را دارند و پروژه GCC (GNU Compiler Collection) قابلیت ترجمه برنامه شما به معماریهای مختلف پردازشگرها ( مثل MIPS و ARM و PowerPC و Sparc و z390 و Itanium و ... ) را برای سیستم عاملهای مختلف سری BSD ، سیستم عاملهای مکینتاش macOS ، ویندوز و حتی سولاریس را دارد
اما از این محدودیت که بگذریم ، سیستم عامل هاعاملها ، امکانات زیادی در جهت سهولت در ایجاد برنامه فراهم می کنند که همواره در حال به روز شدن هستند ؛ به همین علت است که یک برنامه در ویندوز ایکس پی Windows XP اجرا می شود اما در ویندوز ۷ نه ؛ چون برنامه نویس هانویسها برای کم شدن حجم برنامه خود و آسان ترآسانتر شدن برنامه نویسی از منابع سیستم عامل استفاده می کنند که این منابع ، خود یا دستور هایی که می گیرند و می دهند در هر به روز رسانی مایکروسافت تغییر می کنندمیکنند . گرچه سازمان هایسازمانهای فناوری رایانه و الکترونیک در تلاش هستند تا استانداردهایی را ایجاد کنند که مورد حمایت کمپانی های بزرگ همچون مایکروسافت ، اپل مکینتاش ، آی بی امآیبیام و ... برای سیستم عامل هاعاملها و از طرفی دیگر ، ارائه کنندگان کامپایلر هاکامپایلرها ، قرار گیرد تا در نهایت ، برنامه نویسبرنامهنویس با سهولت هر چه تمام ترتمامتر بعد از نوشتن برنامه خود آن را دربرای تمام سیستمسیستمها ها بدون ایراد کامپایلعرضه کند و خروجی خود را عرضه نماید .
بیان این نکته نیز خالی از لطف نیست که عبارت '''به کار گیرنده''' به مجموع کامپایلر ، لینکر ، دیباگر و مفسر گفته میشود .