C/CPP_Lec

@cpp-lec

C/C++ lectures

Public team

Community (0)
No community contribution yet

Joined on Jun 11, 2022

  • За жизнь Rust - язык без стандарта, свой компилятор языка без стандарта создать невозможно, тк то, как работает компилятор разработчика языка и является фактически стандартом. Переменные и Операторы int a, b = 5; // переменная a не инициализируется Инициализуется только переменные те у которых стоит = Локальные переменные без инициализации содержат мусор (рандомное значение), тк под локальные переменные место на стеке выделяется, но ничем не заполняется, может случиться 0, может не 0, из разных запусков - может случиться разное, из разных компиляций (release/debug) может случиться разное. Вообще, ошибки обращения к неиницилизированным переменным - это очень частые ошибки.
     Like  Bookmark
  • За жизнь Сначала будет много про Си, тк Си++ - исходно расширение языка си: изначально он был как предпроцессор, который превращал его в си код, который потом компилировался - это был не отдельный язык, а надстройка над си. Потом C++ разошелся с си, некоторые вещи работают по-другому. Но в общем С++ можно считать надмножеством языка си, многое, что работает в си, работает и в ++. Идея - языка C/C++. Почему важно? - сильно влияет на проиходящие, стиль и т.д. Си относиться к одним из самых старых яп которые живы: старше си только фортран. Фортран создавался как язык для научных вычеслений, напрмер в нём легко работать с матрицами и т.д. А на си удобнее работать с системными функциями. Фортран часто используется в вычеслительных серверах. На нём написано много ПО, по этому яп до сих пор жив. Отметим, что ЯП бывают разные, так, например, Паскаль и вовсе создавался для обучения. -Для чего создавался си? -Системными программистами для себя.
     Like 1 Bookmark
  • (23.04.2022) Про шаблоны Это не функция! это пример как создать что-либо! допустим есть a.h файл в котором мы реализуем функцию, и ещё b.h, b.cpp и main.cpp. Допустим мы подклюаем a.h в b.h и main.cpp, при линковке возникает ошибка Про структуры в С++ В C++ в структурах можно реализовывать функции (методы)
     Like  Bookmark
  • (19.03.2022) Про размеры Тип для размера массивов или чего либо другого - size_t - модификатор %z (%zu - стандарт C99) ptrdiff_t - для разницы двух указателей (size_t со значком) - модификатор %t (%ti или %td стандарт C99) (Данный тип описан в заголовочном файле stddef.h для языка C и в файле cstddef для языка C++) Обратный цикл для size_t: for(size_t x=N; x--; )
     Like  Bookmark
  • (30.04.2022) Методы Методы - функции класса или структуры struct A { int x; int f() {return x;} };
     Like  Bookmark
  • [TOC] Типы с плавующей точкой Много вычислений в числах с плавающей точкой - накапливают большую погрешность, немного разные реализации могут давать существо разную точность Сравнивать можно только через eps if (a==b) // неправильно
     Like  Bookmark
  • [TOC] Про подключаемые файлы Иногда при перестановке подключения хидеров (заголовочных файлов - #include "a.h") программа не компилируется. Это сигнализирует о том, что один из хидеров не подключил все необходимые ему хидеры! -Почему же компилировалось раньше? -Потому что этот самый заголовочный файл подключался в .cpp файлы уже после необходимого ему хидера, тем самым невербально получая его. А как мы помним .h файлы отдельно не компилируются, только внутри .cpp при его подключении! Для избегания данной проблемы необходимо подключать все нужные заголовочные файлы внутри .h заголовочного файла нашей библиотеки. Тип size_t
     Like  Bookmark
  • [TOC] Массивы Различия массива массивов и матриц Матрица - int m[5][10] доступ к элементу m[2][9], расшифровывается как m[2*10 + 9] Массив массивов int **a
     Like  Bookmark
  • [TOC] Типы данных с плавующей точкой: IEEE 754-2008 - как представляются числа с плавающей точкой в современном компьютере (=> в C/C++) Вольный пересказ (стандарт IEEE-754 (не стандарт языка, стандарт железа, некоторые моменты перенял си)) Их всего 3 типа float = (32 бита) соответствует single precision IEEE 754-2008 10^(+- 38)
     Like  Bookmark
  • Плюсовые касты (int)3.5 == 3; //true Специальные типы для каста int в указатель: intptr_t uintptr_t Можно кастовать указатель int в указатель на double
     Like  Bookmark
  • [TOC] Целочисленные: Название типа В стандарте, не хуже чем По факту (бит) Комментарий int
     Like  Bookmark
  • [TOC] VLA и const VLA - Variable-length array, массив переменной длинны (определяет свою длинну в момент исполнения программы) Переменная внутри скобочек при создании массива, int a[b]; - это всегда VLA, даже если b - const переменная, в си. Подробнее про это в си (const по переменной всё что делает - запрещает её изменять и требует иниц. при создании, => такие переменные могут быть инициализированны в момент запуска программы, например - другими переменными, которые зависят от ввода) В си++ нет, не было и не ожидается VLA вообще (в стандарте, в некоторых компиляторах включенно в качестве расширения компилятора) Следовательно const переменные которые могут быть инициализированны в момент компиляции - подходят для создания обычных массивов. Если мы попытаемся в си++ сделать массив длинны которая определяется в момент исполнения прграммы - по стандарту оно не должно скомпилироваться, однако некоторые компиляторы поддерживают VLA и в си++!
     Like  Bookmark
  • (02.04.2022) Про переменные volatile - информирует компилятор, что значение переменной может меняться извне. Это может произойти под управлением операционной системы, аппаратных средств или другого потока. Поскольку значение может измениться, компилятор каждый раз загружает его из памяти. int t = time(); //... //int t = time(); //может преместить туда, и тогда printf("Time: %i\n", time() - t); //выведет 0
     Like  Bookmark
  • (14.05.2022) Комментарии НЕ надо выделять 10 байт динамически НЕ надо читать посильвольно Нужно ставить ограничение на количество вводимых символов
     Like  Bookmark
  • (07.05.2022) Исключения В си для обработок ошибок приняты коды возврата. float strtonnm(conat char *); //функция для преобразования строку в число //как вернуть ошибку? struct result strtonnm(conat char *); //вернуть структуру (реже всего)
     Like  Bookmark