Как выглядит код программы

Быстрый обзор основных конструкций языка C для тех, кто хочет разобраться в основах. Здесь вы встретите много очевидных и понятных конструкций, которые есть во многих языках, — это потому, что многие языки взяли эти конструкции как раз из языка C.

На самом деле в статье их 11, но 10 звучит лучше.

Точка с запятой ставится после каждой команды.

Комментарии

Классические комментарии в C выглядят так:

/* Привет, это комментарий */
/* Его можно начинать на одной строчке
и продолжать на другой */

Есть ещё однострочные комментарии двумя слешами //, но бывают компиляторы, которые их не понимают.

Переменные и типы данных

Чтобы объявить переменную в C, нужно сначала указать её тип, а потом написать имя. Отдельного служебного слова для создания переменной в C нет.

В C есть разделение на короткие (short), обычные и длинные (long) переменные — на 2, 4 и 8 байт соответственно. Это нужно для экономии памяти, чтобы выделять ровно то количество байт, которое нужно для работы программы.

КАК ЧИТАТЬ И ПОНИМАТЬ С/C++ КОД?


int i; /* целое число на 4 байта */ int x,y; /* две целочисленные переменные */ short int si; / *короткое целое число на 2 байта */ long int l; /* целое число на 8 байт */ char c; /* символьная переменная */ float f; /* дробная переменная на 4 байта */ double d; /* дробная переменная на 8 байт */ int a [10]; /* массив из 10 целых чисел */ struct str_name; /* структура из целого числа и символа */

Внешние файлы и директивы

Чтобы программа получила некоторые дополнительные возможности, которых нет в коде по умолчанию, используют директивы. Они обычно пишутся в начале программы и начинаются с символа решётки:

/* компилятор ищет файл prog.h в каталоге /usr/include и позволяет нам использовать команды из этого файла */ #include #ifdef i8088 /* если программа будет запущена на процессоре 8088, то выполнятся инструкции, написанные внутри этого блока */ #endif

Формат программы

В каждой программе на C должна быть функция main(), внутри которой размещается основной код. Большинство компиляторов требуют, чтобы мы указали тип этой функции — обычно можно использовать int (целочисленный) или void (пустой). Все остальные функции добавляются по желанию, но main() должна быть всегда.

#include /* основная функция */ void main() < /* содержимое функции */ >

Ввод и вывод

Для вывода используется команда printf():

/* подключаем библиотеку расширенного ввода-вывода */ #include /* основная функция */ void main() < /* объявляем целочисленную переменную */ int x; /* выводим только строку /* printf(«Введите число: «); /* вводим число */ cin >> x; /* выводим строку и переменную */ /* u означает, что переменную нужно вывести как целое десятичное число без знака */ printf(«Вы ввели %u», x); >

Читайте также:
Как скопировать установленную программу

Если нужен ввод данных, то используют команду scanf():

/* подключаем библиотеку расширенного ввода-вывода */ #include /* основная функция */ void main() < /* объявляем переменные */ int h,m; /* выводим только строку /* printf(«Введите время в формате чч:мм «); /* вводим время */ /* d означает, что мы ждём целое десятичное число */ scanf(«%d:%d», m); >

Присваивание и сравнение

C использует классический подход:

Программирование для всех

один символ «равно» — присваивание

два символа «равно» — сравнение

Остальные операторы сравнения и логические операторы такие же, как и в других языках. Каждое сравнение берётся в скобки.

Условный оператор if

Тоже всё стандартно (потому что C во многом этот стандарт и создал):

if (условие) /* если условие верно, делаем что-то */
> else /* если условие неверно, делаем что-то другое */
>

#include void main() < int pass; prinf(«Введите пароль: «); scanf(«%d», /* если ввели число 1234 */ if (pass == 1234) < printf(«Вход разрешён»); /* если ввели что-то другое */ >else < prinf(«Вы ввели неверный пароль»); >>

Если блок с else не нужен, его можно не писать — короткий if тоже работает.

Оператор множественного выбора switch

Чтобы не плодить множество операторов if, когда нужно выбрать одно из нескольких значений, используют оператор switch:

#include int main() < short int day; printf(«Введите номер дня недели»); scanf(«%d», /* если номер больше семи — берём целочисленный остаток от деления номера на 7 */ if (day >7) < day = day % 7; >/* выбираем день из вариантов ниже */ switch (day) < /* если день равен 0 */ case 1: printf(«Понедельник»); /* выходим из дальнейших проверок */ break; case 2: printf(«Вторник»); break; case 3: printf(«Среда»); break; case 4: printf(«Четверг»); break; case 5: printf(«Пятница»); break; case 6: printf(«Суббота»); break; /* если ни один вариант не подошёл */, default: printf(«Воскресенье»); >>

Если не ставить команду break, то оператор будет продолжать выполнять остальные проверки, даже если найдёт совпадение по условию.

Цикл с предусловием for

Классический цикл, который в таком же виде используется во многих языках:

int i; /* перебираем все числа от 1 до 100, увеличивая переменную на 1 на каждом шаге цикла */ for (i = 1; i < 101; i++) < /* выводим значения их квадратов */ printf(«%d «, i*i); >

Особенность этого цикла в C в том, что он может работать и с дробными числами, например, увеличивать счётчик каждый раз на 0,1:

/* дробное число */ float num; /* идём от 5 до 0 и каждый раз уменьшаем число на 0,1 */ for (num = 5.0f; num > 0f; num -= 0.1) < /* выводим результат */ printf(«%.2f «, num); >

Циклы while и do-while

Если вы заранее не знаете, сколько раз будет выполняться цикл, используйте while или do-while. Первый проверяет условия до начала цикла (и если там истина — выполняет его), а второй делает проверку в самом конце.

/* объявляем переменную и сразу присваиваем ей значение */ int i = 0; /* пока i меньше 10 – цикл работает */ while (i < 10) < printf(«%dn», i); /* обрабатываем переменную цикла */ i++; >/* сделаем то же самое, но с постусловием */ i = 0; /* сначала заходим в цикл */ do < printf(«%dn», i); i++; /* а в конце проверяем, идём на новый повтор или нет */ >while(i < 10);

Читайте также:
Описание рабочей программы воспитателя

В отличие от цикла for здесь программист сам должен следить за тем, чтобы цикл когда-нибудь прекратился. Если забыть изменить в теле цикла переменную, от которой зависит условие, то программа может зациклиться и зависнуть.

Функции

В языке C программист может объявить сколько угодно функций. Каждая функция объявляется так:

тип_результата название (аргументы) тело_функции
>

Если у функции нет аргументов, то ставят просто две скобки, а если есть, то нужно обязательно указать их тип:

#include /* объявляем функцию sqr */ float sqr(float x) < /* возвращаем квадрат переданного числа */ return x * x; >/* основная функция */ void main() < /* выводим строку и сразу вызываем функцию, которая вернёт нам квадрат числа*/ printf(«Квадрат числа 4,2 равен %.3f», sqr(4.2f)); >

Классы, объекты и методы

В языке C такого нет. Если нужно ООП — используйте С++, про него будет в следующий раз.

Источник: thecode.media

Исходный и объектный код.
В чем разница?

Термины «исходный код» и «объектный код» довольно часто встречаются в мире программирования и веб-дизайна. В этой статье мы постараемся разобраться в этих терминах, а также объясним контекст, в котором они используются.

Что такое исходный код

Исходный код — это набор инструкций или команд, который может быть прочитан человеком. Грубо говоря — это обычный текстовый файл.

После создания исходного кода он сохраняется в файле в соответствии с его расширением. Например, файл JavaScript сохраняется с расширением «.js», а файл C++ — с расширением «.cpp». Переводчик языка получает исходный код, а затем преобразует его в машинный код, который по другому называется объектным кодом.

Для эффективной разработки программы исходный код пишется либо на ассемблере, либо на высокоуровневом языке программирования.

Язык ассемблера — это машинно-ориентированный язык, который требует специальных знаний для его расшифровки. В высокоуровневых языках программирования в качестве инструкций используются английские и математические символы, а также языки — C, C++, Java, Python, JavaScript.

Как используется исходный код

Исходный код написан простым текстом, который хорошо понятен людям. Исходный код любого веб-сайта найти несложно — достаточно щелкнуть правой кнопкой мыши на любой веб-странице и перейти к пункту «Просмотреть исходный код страницы».

Вам откроется новая вкладка с исходным кодом. Вот так выглядит исходный код главной страницы интернет-агентства Binn . Исходный код с этой веб-страницы написан в текстовом формате и может быть прочитан как обычными людьми, так и программистами.

Что такое объектный код

Объектный код представляет собой компьютерный числовой код, который состоит из двоичных чисел, таких как 0 и 1, и может быть распознан только компьютером. Грубо говоря, объектный код — это промежуточное представление кода, то есть еще не машинный, но уже не исходный.

Объектный код обычно используется на этапе сборки программы. Это вывод исходного кода после компиляции. Объектный код остается в объектном файле — COM, COFF (общий формат объектных файлов). Объектный код, машинный код и двоичный код могут использоваться взаимозаменяемо.

Как используется объектный код

Объектный код обычно включает интерпретированную или скомпилированную программируемую логику, встроенное ПО и различные библиотеки.

Объектный код генерируется компилятором, который считывает исходные инструкции компьютерного языка более высокого уровня, а затем переводит их в эквивалентные инструкции машинного языка. Визуально объектный код выглядит следующим образом:

Объектный код написан с помощью нулей и единиц, и его сложно прочитать людям, для его чтения необходим компьютер.

Читайте также:
Как поставить программу на удаленный сервер

Компиляция исходного код в объектный

Компилятор преобразует удобочитаемый код в объектный (или машинный) код. У каждого высокоуровневого языка программирования есть свой собственный компилятор, который преобразует код в язык, понятный машине. Визуально процесс разработки ПО может выглядеть примерно так:

Исходный код и объектный код можно рассматривать как версии до и после компьютерного программирования. Рассмотрим этапы:

  1. Программист, который использует типы языка Java в нужной последовательности, сохраняет их, изменяя наименование так, чтобы оно содержало исходный код.
  2. После этого файл готов к компиляции и проходит через компилятор Java.
  3. Полученный результат (скомпилированный файл) называется объектным кодом.
  4. Объектный код содержит последовательность инструкций, которые понятны процессору, но трудны для понимания человеком.

Разница между исходным и объектным кодом

Теперь, когда у нас есть общее представление об исходном и объектном коде, мы можем сформулировать основное различие между этими двумя терминами.

Если коротко, то исходный код — это набор инструкций, который написан с использованием языка программирования, а объектный код — это результат исходного кода после обработки компилятором.

Исходный код против объектного кода

Исходный код создает объектный код, и чтобы создать приложение, которое в дальнейшем можно распространить, объектный код создает исполняемый файл, который доступен для любых пользователей.

Точно так же, как человек понимает родной язык, компьютеры понимают машинный язык. Иногда даже человеку нужен переводчик для понимания иностранного языка, поэтому компьютеру потребуется компилятор (переводчик), чтобы отличить исходный код от объектного кода.

Источник: www.binn.ru

Учимся правильно оформлять код на C на примере open source проектов

Обложка: Учимся правильно оформлять код на C на примере open source проектов

В каждом проекте есть свои соглашения по написанию и оформлению кода. Некоторые менеджеры ограничиваются только базовыми правилами, некоторые составляют подробные списки рекомендаций. В некоторых проектах правил оформления кода нет совсем, и каждый разработчик следует своему стилю.

Если исходники большого проекта написаны в одном стиле, их гораздо легче понимать.

Научиться правильному оформлению кода можно, например:

  • из книг и журналов;
  • из руководств в сети;
  • из общения с коллегами;
  • на собственном опыте.

Другой, не менее интересный, подход — взять проверенный временем открытый проект и разобраться в том, какие решения принимали его разработчики. Хорошим примером в этом случае будет ядро Linux.

Для новичка или даже для опытного разработчика, разбор кода ядра Linux может оказаться непростой задачей. Однако наша цель не присоединиться к ним, а просто рассмотреть детали реализации.

Давайте посмотрим на пример реализации функции из исходного кода Linux:

Код выглядит чистым и понятным:

  • Он короткий, всего несколько строк.
  • Подробная сигнатура функции.
  • Код хорошо документирован.
  • Код правильно и последовательно структурирован.
  • Понятные имена переменных.

Тот же код, написанный другим разработчиком, может выглядеть так:

void hso( struct pho *ops) < if (ops !(ops->begin ops-> end ops->pre_snapshot ops->prepare ops->finish ops->enter ops->pre_restore ops->restore_cleanup ops->leave)) < WARN_ON(1); return; >lsleep(); hibernation_ops = ops; if (ops) hm = HIBERNATION_PLATFORM; else if (hm == HIBERNATION_PLATFORM) hibernation_mode = HIBERNATION_SHUTDOWN; usleep(); >

Стиль написания кода очень сильно влияет на его читаемость. Поэтому время, потраченное на тренировку и периодические код-ревью, всегда окупится.

Давайте теперь посмотрим на код ядра Linux с помощью CppDepend и попробуем разобраться, какими правилами руководствовались разработчики.

Модульность

Модульность — это техника дизайна приложений, которая обеспечивает повторное использование кода и облегчает его поддержку.

Для процедурного языка, такого, как C, в котором нет пространств имен, классов или компонентов, мы можем разделять модули, помещая код в отдельные файлы и директории.

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru