Skip to content

Commit e25ca57

Browse files
committed
C++ junior developer
0 parents  commit e25ca57

2,114 files changed

Lines changed: 93218 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

!doc.cmd

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@for /d %%i in (*) do @(
2+
@echo === %%i ===
3+
@pushd %%i
4+
@call doc.cmd
5+
@popd )

!style.cmd

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
AStyle --options=astyle.cfg --recursive *.c
2+
AStyle --options=astyle.cfg --recursive *.cpp
3+
AStyle --options=astyle.cfg --recursive *.h

.github/workflows/ci.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [ master, main ]
6+
pull_request:
7+
branches: [ master, main ]
8+
workflow_dispatch:
9+
10+
concurrency:
11+
group: ${{ github.workflow }}-${{ github.ref }}
12+
cancel-in-progress: true
13+
14+
jobs:
15+
build:
16+
runs-on: ubuntu-latest
17+
timeout-minutes: 15
18+
19+
steps:
20+
- uses: actions/checkout@v4
21+
22+
- name: Install Qt and coverage tools
23+
run: |
24+
sudo apt-get update
25+
sudo apt-get install -y qt5-qmake qtbase5-dev qtchooser lcov
26+
27+
- name: Build with coverage
28+
run: |
29+
qmake "QMAKE_CXXFLAGS += -fprofile-arcs -ftest-coverage" "QMAKE_LFLAGS += -fprofile-arcs -ftest-coverage" 2>/dev/null || qmake
30+
make -j$(nproc)
31+
32+
- name: Run tests
33+
run: make check || ctest || true
34+
35+
- name: Coverage report
36+
if: always()
37+
run: |
38+
lcov --capture --directory . --output-file coverage.info --ignore-errors source 2>/dev/null || true
39+
lcov --remove coverage.info '/usr/*' '*/moc_*' '*/ui_*' --output-file coverage.info 2>/dev/null || true
40+
if [ -f coverage.info ] && [ -s coverage.info ]; then
41+
echo "## Test Coverage Report" >> $GITHUB_STEP_SUMMARY
42+
echo '```' >> $GITHUB_STEP_SUMMARY
43+
lcov --summary coverage.info 2>&1 | grep -E "lines|functions" >> $GITHUB_STEP_SUMMARY
44+
echo '```' >> $GITHUB_STEP_SUMMARY
45+
echo "" >> $GITHUB_STEP_SUMMARY
46+
echo "### Per-file" >> $GITHUB_STEP_SUMMARY
47+
echo '```' >> $GITHUB_STEP_SUMMARY
48+
lcov --list coverage.info 2>&1 | head -30 >> $GITHUB_STEP_SUMMARY
49+
echo '```' >> $GITHUB_STEP_SUMMARY
50+
fi

.gitignore

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Compiled Object files
2+
*.slo
3+
*.lo
4+
*.o
5+
6+
# Compiled Dynamic libraries
7+
*.so
8+
*.dylib
9+
10+
# Compiled Static libraries
11+
*.lai
12+
*.la
13+
*.a
14+
15+
# .exe
16+
*.exe
17+
18+
# Qt
19+
build-*
20+
# Пользовательские файлы проекта
21+
# (связанные с конкретной цепочной компиляции)
22+
*.user
23+
*.user.3.2-pre1
24+
*.user.*
25+
26+
# Code::Blocks
27+
bin
28+
obj
29+
*.depend
30+
*.layout
31+
*.autosave
32+
*.orig
33+
.idea
34+
35+
# Сборка проекта
36+
Makefile
37+
Makefile.Debug
38+
Makefile.Release
39+
*.log
40+
*.pdb
41+
/lesson_01/PrintArgs/PrintArgs/Release/PrintArgs.tlog/*.tlog
42+
43+
# Latex-файлы презентации
44+
*.snm
45+
*.toc
46+
*.vrb
47+
*.pdf
48+
*.aux
49+
*.out

.travis.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
language: cpp
2+
compiler:
3+
- clang
4+
- gcc

01/000_intro.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
Введение в C++
2+
==============
3+
4+
Языки высокого и низкого уровня
5+
-------------------------------
6+
7+
*Высокоуровневый язык программирования* - язык, нацеленный на *скорость* и *удобство* разработки (удобство программиста)
8+
в том числе за счёт понижения эффективности использования *памяти* и процессорного *времени*.
9+
Приближен к естественному языку.
10+
Основная черта высокоуровневых языков - это *абстракция*, то есть введение смысловых конструкций,
11+
кратко описывающих такие структуры данных и операции над ними,
12+
описания которых на машинном коде (или другом низкоуровневом языке программирования) очень длинны и сложны для понимания.
13+
14+
*Язык низкого уровня* - близок к программированию непосредственно в машинных кодах
15+
(или на ассемблере) используемого реального или виртуального (например, Java, Microsoft .NET) процессора.
16+
17+
Фокус на *скорости* и *эффективности* использования памяти.
18+
19+
*Основные преимущества языков низкого уровня:*
20+
* эффективное использование процессорного времени и памяти.
21+
* часто язык низкого уровня позволяет обратиться к ресурсам, недоступным из языка высокого уровня.
22+
* как правило, размер исполняемого файла готовой программы получается меньше.
23+
24+
История создания языка C, история C++. Перспективы - язык D
25+
-----------------------------------------------------------
26+
* Разработан в 1972 - Деннис Ритчи, Кен Томпсон
27+
* 1978 - Брайан Керниган и Деннис Ритчи опубликовали первую редакцию книги "Язык программирования Си"
28+
* 1983 - Американский национальный институт стандартов (ANSI) сформировал комитет для разработки стандартной спецификации Си
29+
* 1989 - ANSI C. Утверждён "Язык программирования Си" ANSI X3.159-1989.
30+
* 1990 - Стандарт ANSI C был принят с небольшими изменениями Международной организацией по стандартизации (ISO) как ISO/IEC 9899:1990.
31+
* 1999 - Стандарт C99.
32+
* 8 декабря 2011 опубликован новый стандарт для языка Си (ISO/IEC 9899:2011).
33+
* Язык D - http://dlang.org. Примеры на языке D: https://github.com/stden/dlang
34+
35+
Выбор компилятора и IDE
36+
-----------------------
37+
* GCC - GNU Compiler Collection - кроссплатформенный компилятор
38+
* Visual C++ Compiler - колимпилятор под Windows от Microsoft
39+
40+
Установка IDE Code::Blocks. Запуск программы. Отладка
41+
-----------------------------------------------------
42+
* Code::Blocks: http://www.codeblocks.org/downloads/binaries - выбирайте версию вместе с MinGW (например: codeblocks-13.12mingw-setup.exe)
43+
44+
Опции компилятора
45+
-----------------
46+
* *-Wall* - показывать все предупреждения
47+
48+
Программа "Hello world!" на C и на C++. Отличия С и C++
49+
-------------------------------------------------------
50+
* [Hello world C++](/lesson_01/00_first/helloworld.cpp)
51+
* [Hello world C](/lesson_01/00_first/helloworld.c)
52+
53+
54+
Стиль оформления кода программы
55+
-------------------------------
56+
57+
*Зачем?*
58+
59+
Одним из важнейших факторов, влияющих на способность программы к развитию, является лёгкость её *понимания*.
60+
Одним из существенных факторов понимаемости программы, в свою очередь, является информативность исходного текста.
61+
Если исходный текст трудно читать (он написан без соблюдения определенного стиля и системы и представляет собой
62+
"мешанину" операторов и знаков препинания),
63+
то вносить изменения в него очень сложно даже автору.
64+
65+
Рассмотрим ряд требований и рекомендаций, позволяющих выработать хороший стиль оформления программ, повышающий ее информативность.
66+
67+
Типичные рекомендации
68+
---------------------
69+
70+
*1. Допускаются любые нарушения рекомендаций, если это улучшает читаемость*
71+
72+
Основная цель рекомендаций - улучшение читаемости и, следовательно, ясности и лёгкости поддержки,
73+
а также общего качества кода.
74+
Невозможно дать рекомендации на все случаи жизни, поэтому программист должен мыслить гибко.
75+
76+
77+
Ввод и вывод данных (консоль) в C и в C++. Ввод и вывод из текстового файла
78+
---------------------------------------------------------------------------
79+
80+
81+
Литература по C/C++
82+
-------------------
83+
* https://vk.com/cpp_junior_developer - группа ВКонтакте
84+
85+
Пример: https://ideone.com/q9Vglz
86+
Среда разработки в облаке: https://ideone.com
87+

01/00_OnlyC/00_OnlyC.cbp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
2+
<CodeBlocks_project_file>
3+
<FileVersion major="1" minor="6" />
4+
<Project>
5+
<Option title="00_OnlyC" />
6+
<Option pch_mode="2" />
7+
<Option compiler="gcc" />
8+
<Build>
9+
<Target title="Debug">
10+
<Option output="bin/Debug/00_OnlyC" prefix_auto="1" extension_auto="1" />
11+
<Option object_output="obj/Debug/" />
12+
<Option type="1" />
13+
<Option compiler="gcc" />
14+
<Compiler>
15+
<Add option="-g" />
16+
</Compiler>
17+
</Target>
18+
<Target title="Release">
19+
<Option output="bin/Release/00_OnlyC" prefix_auto="1" extension_auto="1" />
20+
<Option object_output="obj/Release/" />
21+
<Option type="1" />
22+
<Option compiler="gcc" />
23+
<Compiler>
24+
<Add option="-O2" />
25+
</Compiler>
26+
<Linker>
27+
<Add option="-s" />
28+
</Linker>
29+
</Target>
30+
</Build>
31+
<Compiler>
32+
<Add option="-Wall" />
33+
</Compiler>
34+
<Unit filename="main.c">
35+
<Option compilerVar="CC" />
36+
</Unit>
37+
<Extensions>
38+
<code_completion />
39+
<envvars />
40+
<debugger />
41+
<lib_finder disable_auto="1" />
42+
</Extensions>
43+
</Project>
44+
</CodeBlocks_project_file>

01/00_OnlyC/main.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Чистый C
2+
// --------
3+
#include <stdio.h>
4+
#include <stdlib.h>
5+
6+
int main() {
7+
int N = 10;
8+
int a, b;
9+
10+
printf("N = %d\n", N);
11+
scanf("%d %d", &a, &b);
12+
/* a -> значение */
13+
printf("a + b = %d\n", a + b);
14+
15+
a = b * b;
16+
printf("a = %d\n", a);
17+
18+
return 0;
19+
}

01/00_codeblocks/CodeBlocks.png

99.8 KB
Loading
64.6 KB
Loading

0 commit comments

Comments
 (0)