Найти в Дзене
Old Programmer

Программирование. Некоторые "фишки" языка C

Оглавление

Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). А тут собраны все материалы по C и C++.

Список разделов канала Old Programmer, канала о программировании и программистах
Old Programmer27 мая 2021

Читаем мои статьи, подписываемся на мой канал:

Объектно-ориентированное программирование. Простой пример на Python. Статья 4
Old Programmer1 августа 2020
Программирование. Словари в языке Python
Old Programmer31 июля 2020
Из записок старого программиста. Притчи о компьютерных жителях. Товарищ Комманд Ком, Диггер и отец Виндовс...
Old Programmer31 июля 2020
Postgres. Пишем запросы на SQL (оконные функции). Статья 5
Old Programmer29 июля 2020

Сегодня поговорим о языке C, о некоторых его особенностях. Вот именно по этим особенностям (фишкам) и распознается настоящий программист-сишник. Я пришел к языку C, когда за плечами уже были другие языки. Поэтому в моих программах на C проскакивают время от времени выражения хоть и правильные с точки зрения синтаксиса, но выдающие меня с головой. Конечно, есть люди, которые критикуют использования специальных особенностей языка C. По их мнению это делает программу на языке C не понятной. Но я же пишу совсем о другом. О красоте программирования, об удовольствии программировать, о программировании, как искусстве. И здесь краткость - это сестра таланта.

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

Роль чисел в языке C

Роль чисел в C крайне велика, я бы даже сказал, что в C все есть числа. Даже символы (тип char) легко превращаются в числа вот так char c='A'; int a; a=(int)c. Нет в C и строк, есть лишь массивы символов, конец которых отмечается символом с кодом 0. Нет в C и логических типов переменных. Все сводится опять к числам. Условные конструкции реагируют на нулевое значение как на false, а на не нулевое как на true. Поэтому настоящие программисты-сишники вместо if(a==0) пишут if(!a), а вместо if(a!=0) пишут if(a):

if(!a){
//что-то делаем
}else{
// что-то делаем
}

Еще одна особенность языка C отражена в программе main30a.c. Суть ее заключается в том, что выражение вида (a=b) равно присвоенному значению, т.е. значению переменной b. В программе main30a.c предполагаем, что вводимые числа положительны.

Инкремент и декремент в языке C

Инкремент (увеличение переменной на единицу) обозначается двумя плюсами, а декремент двумя минусами. Но многие ли знают что есть разница между ++i и i++. Можно написать a=++i и a=i++. В первом случае значение i будет увеличено на 1 и потом присвоено a, во втором случае наоборот. Глянем на программу ниже (main30.c). Типичный стиль C. Вычисляется сумма элементов массива. Она, как и ожидалось будет равна 15. А что будет, если вместо a[i++] мы запишем a[++i]? Правильно, результат будет равен 14. Вот такие дела.

Ну и, наконец, красивое копирование одной строки в другую, конечно

while(*s2++ = *s1++);

но при условии, что строка s1 заканчивается символом с кодом 0. Да, и не забудьте, что после операции оба указателя будут направлены на конец строк.

Тернарная условная конструкция в языке C

Тернарная условная конструкция имеет вид

условие?выражение1:выражение2

С помощью такой технологии можно создавать сложные алгоритмы, записываемые в строку. Например

a==b?printf("=\n"):a>b?printf(">\n"):printf("<=\n");

на консоли будет напечатано =, если переменные равны, > если a больше b, и <= в противном случае.

А вот еще пример на засыпку:

m=(a>b)?((a>c)?a:c):((b>c)?b:c);

Что получиться в результате? Догадались? Переменной m будет присвоено максимальное из трех чисел! Красиво, да?

Программа main30a.c
Программа main30a.c

Пока! Подписываемся на мой канал Old Programmer и программируем с удовольствием на C.

Рекомендуем почитать
Документы, вакансии и контакты