Библиотека C/C++ разработчика | cpp, boost, qt
21K subscribers
1.57K photos
40 videos
16 files
3.74K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Наши каналы: https://yangx.top/proglibrary/9197

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
加入频道
​​Как выстрелить себе в ногу при написании программ на С/С++
Статья содержит примеры плохого кода, который на первый взгляд кажется вполне легитимным. Учимся на ошибках других 👇

https://hownot2code.com/2019/07/26/how-to-shoot-yourself-in-the-foot-in-c-and-c-haiku-os-cookbook/
​​​​Макросы – это зло(иногда)
Они являются одной из причин багов в коде, делают программу сложной для чтения и понимания, да и сами макросы написать не так легко.

Язык С++ отлично подходит для кодинга без макросов. Поэтому давайте попробуем использовать их как можно реже.

А вы используете macros в коде?

https://arne-mertz.de/2019/03/macro-evil/
Если вам нужно продлить жизнь объекта в lambda-выражении на С++ и одновременно использовать this-указатель, эта статья научит вас одному из оптимальных способов, как это сделать👇
https://devblogs.microsoft.com/oldnewthing/20190104-00/?p=100635
Что выведет программа?
#include <iostream>
using namespace std;
void fun(int& a, int b)
{
a += 2;
b += 1;
}
int main()
{
int x = 10, y = 2;
fun(x, y);
cout << x << " " << y << " ";
fun(x, y);
cout << x << " " << y;
return 0;
}
Рассмотрим некоторые темы программирования на Си уровня advanced.
http://pfacka.binaryparadise.com/articles/guide-to-advanced-programming-in-C.html
Читаете it-литературу, блоги на каком-то иностранном языке?
Найдите проблему в коде:
#include<stdio.h>
int main() { int *p = (int *)malloc(sizeof(int)); p = NULL; free(p); }
Anonymous Poll
31%
free() нельзя применить к NULL-pointer
51%
Утечка памяти
18%
Висячий указатель
free() можно спокойно применить к NULL-pointer. В данном случае проблемой является утечка памяти. Сначала надо вызвать функцию free() на поинтер, а потом присвоить ему значение NULL.
Правильная последовательность:
free(p);
p = NULL;
В каком сегменте памяти находятся i, j и *k?

int i; int main() { int j; int *k = (int*)malloc(sizeof(int)); }
Anonymous Poll
8%
i, j, *k находятся в стеке.
24%
i, j – стек, *k – куча.
63%
i – BSS, j – стек, *k – куча.
5%
j – BSS, i – стек, *k – куча.
Programmer С++ в Playrix

Удалённо
Опыт разработки на С++ от 3 лет

https://prglb.ru/56nl8
​​Разбираемся в ООП-дизайне, чтобы управлять сложностью проектов:
https://web.archive.org/web/20120102190219/http://www.accu.informika.ru/acornsig/public/articles/ood_intro.html
Если вы хотите создать свой проект, то можете черпать вдохновение из данного источника.
Сайт содержит множество проектов на C/C++ (без ошибок и очепяток)
https://www.codewithc.com/c-projects-with-source-code/
Что выведет программа?
#include <stdio.h>
#include <stdlib.h> int main(int argc, char *argv[]) { char temp[20]; gcvt(23.45, 3, temp); printf("%s", temp); return 0; }
Anonymous Poll
9%
0
19%
23.5
23%
23.45000
49%
23.4
Правильный ответ: 23.4
Функция gcvt() превращает число с плавающей точкой в строку. Тройка в аргументе означает, что нужно конвертировать первые три цифры.
Правильный ответ не включен в список вариантов.
Интерфейсы можно реализовать с помощью чисто виртуальных функций.
Они специфицирутся тем, что в декларации такой функции присутствует модификатор virtual и "= 0”.
#пример:
class Box {
public:
// pure virtual function
virtual double getVolume() = 0;

private:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
Как найти и отпринтить узлы, у которых нет братьев и сестёр?Помимо имплементации на С++, статья содержит псевдокод, поэтому вы сами можете потренироваться и реализовать поиск.
https://teletype.in/@heisenbug/HkxENxDqr
Что выведет программа?

#include <iostream> int main(int argc, const char * argv[]) { int a[] = {1, 2, 3, 4, 5, 6}; std::cout << (1 + 3)[a] - a[0] + (a + 1)[2]; }
Anonymous Poll
3%
2
6%
4
10%
6
74%
8
7%
10