неділю, 28 грудня 2014 р.

Огляд основних компіляторів на мові програмування С

 Як я часто пишу, що С++ не С, бо там не має ООП ( Об 'єктно-орієнтованого програмування ), так синтаксис процедурного програмування в С++ є, схоже на С, але, є свої розбіжності, я вирішив описати коротко основні компілятори мови програмування С. Чому, тому що часто качають Microsoft Visual C++, C++ не дає можливості скомпілювати між собою код, сам знаю, коли компілював програму в Borland C++, а код написаний в книжці для Microsoft Visual C++ 6.0. Думаю всі знають цей компілятор. Мова С дає можливість кросскомпіляції, але на мій вік програмування, це лише між своїми стандартними бібліотеками, а так все залежить від ОС, так що кросскомпіляція, розуміння розтягнуте. Ми не будемо розглядати такі компілятори як Borland C, які застаріли. Ми будемо розглядати ті які розвиваються, також які підійдуть до навчання. Я можу не написати за всі компілятори, але напишу вільні ( де не потрібно шукати ключі чи кряки ) ви поставили і програмуєте без обмежень.
До речі всім початківцям я раджу почати не з С++, а саме з С, тому що він простіший, самі все зрозумієте. Почнемо по списку, ми розглянемо:
- Clang
- GNU Compiler Collection
- MinGW
- Pelles C

 - Clang

Сайт

Компілятор на базі LLVM, крім С, включає в себе також C++ ( clang++ ), Objective-C и en:Objective-C++. Створений що б замінити GCC компілятор. Використовується в ОС FreeBSD як основний, хоча можна і використовувати GCC. Історію ви можете на сайті Вікіпедії, а наша задача скомпілювати код хоч hello world. Будемо використовувати такий код:
#include <stdio.h>
int main( void ) 
{
  printf("hello world\n");
  return 0;
}
> clang hello.c -o hello.exe
ми також можемо скомпілювати код в проміжний код ( байт код ) LLVM:
> clang hello.c -emit-llvm -c -o hello.bc
і запустити проміжний код в LLVM JIT утилітою lli
> lli hello.bc
hello world

 - GNU Compiler Collection ( GCC )

Сайт
https://uk.wikipedia.org/wiki/GNU_Compiler_Collection

На ранніх порах це був чистий С компілятор, раніше він так і перекладався Gnu C Compilator, але йшли часи і проект переріс в GNU Compiler Collection, там є і С++, Ada, Fortran, C. Провів перелік яких знаю, там є і реалізація GNU Java, але з появою OpenJAVA, той компілятор швидше викинуть , за не потреби і ніби хочуть добавити Go, або це вже остаточно зробили. Підтримується багатьма ОС, та архітектурами, такими як: Alpha, ARM, AVR, x86, SPARC, PowerPC, SuperH та інші. Але то інша історія. Наша задача показати і скомпілювати код.
Так як ми будемо використовувати лише компілятор С, тому пишемо сс, саме так викликається компілятор С в GCC:
> cc hello.c -o hello.exe
> hello.exe
hello world


Я використовую Cygwin для роботи з компілятором.
варто про

 - MinGW

Сайт

Це компілятор GCC для ОС Windows. Крім GCC там зроблено все для розробки програм в ОС Windows, там добавлені файли заголовків та статичні бібліотеки, для того що б використовувати Windows API.
Код компілюється так само як і в GCC.

- Pelles C

Сайт
www.christian-heffner.de/
IDE для мови програмування С, працює в Windows і Pocket PC. Створений на основі LCC.
Робимо як далі, завантажили, встановили, запускаємо: File → New → Project → Win32 Console program (EXE) як на скріншотові. Та даємо назву проекту в розділі Name.

Далі File → New → Source code. Зберігаємо як hello.c File → Save as...
Копіюємо код вище, зберігаємо ( CTRL+S ), потім збираємо проект CTRL+B, або вкладка Project → Build test.exe ( test.exe так ми назвали проект, у вас буде так як ви назвали ім'я проекту, назва довільна ), Запускаємо проект Project → Execute test.exe або комбінацією клавіш Ctrl+F5 і повинно вийти на щось схоже

Якщо немає помилок.

 Коротко все, я не описував установку компіляторів, бо наприклад інсталятор Mingw періодично на зовнішній вигляд міняється, після установки назву папки потрібно занести в список перемінного середовища, де встановлений проект, якщо ви використовуєте Cygwin то це все автоматично, буде.Для того що б не вводити купу команд кожного разу, варто використовувати make файл, який потрібно написати, про нього ми поговоримо в наступному записі.