Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 1. Установка необходимого ПО для выполнения лабораторной работы №1
- В процессе установки программного обеспечения с проблемами не столкнулся
- # 2. Выполнение лабораторной работы
- ## Этапы компиляции и компановки
- gcc - это оптимизирующий компилятор для языка C. Программа gcc, запускаемая из командной строки, представляет собой надстройку над группой компиляторов. В зависимости от расширений имен файлов, передаваемых в качестве параметров, и дополнительных опций, gcc запускает необходимые препроцессоры, компиляторы.
- –c означает только компиляция.
- -Wall вывод сообщений о всех предупреждениях или ошибках, возникающих во время компиляции программы.
- -Werror превращает все предупреждения в ошибки. В случае появления предупреждения прерывает процесс компиляции. Используется совместно с опцией -Wall.
- -std=c99 стандарт языка программирования Си.
- -g3 создать отладочную информацию для работы с отладчиком.
- Чтобы скомпоновать один или несколько объектных файлов, полученных из исходного кода - main.o - в единый исполняемый файл main.exe, необходимо ввести команду:
- gcc -o main.exe main.o
- Опция -o задает имя исполняемого файла.
- ## Задача №2
- Скопировала программу(задача №2) с ошибками.
- Её код:
- ```
- include studio.h
- main{}
- (
- int s;
- s: = 56;
- print (Year has s weeks)
- )
- ```
- Для задачи был создан проект lab_01_0_2 в QtCreator(Подробнее см.пункт (3) Работа с QtCreator).
- Ошибка №1
- ```
- main.c:1:1: error: unknown type name 'include'
- include studio.h
- ^~~~~~~
- ```
- Ошибка №1: перед include не стоит #.
- Исправление:
- ```
- $ git diff
- diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
- index db4d83b..b219a86 100644
- --- a/lab_01_2_2/main.c
- +++ b/lab_01_2_2/main.c
- @@ -1,4 +1,4 @@
- -include studio.h
- +#include studio.h^M
- main{}
- (
- ```
- Зафиксируем изменение:
- ```
- $ git commit -m " # was added before include"
- [lab_01 b72521a] # was added before include
- 6 files changed, 399 insertions(+)
- create mode 100644 lab_01_2_2/lab_01_2_2.config
- create mode 100644 lab_01_2_2/lab_01_2_2.creator
- create mode 100644 lab_01_2_2/lab_01_2_2.creator.user
- create mode 100644 lab_01_2_2/lab_01_2_2.files
- create mode 100644 lab_01_2_2/lab_01_2_2.includes
- create mode 100644 lab_01_2_2/main.c
- ```
- Ошибка №2
- ```
- main.c:1:10: error: #include expects "FILENAME" or <FILENAME>
- #include studio.h
- ^~~~~~
- ```
- Ошибка №2: нет <названия>.
- Исправление:
- ```
- $ git diff
- diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
- index b219a86..7ec615c 100644
- --- a/lab_01_2_2/main.c
- +++ b/lab_01_2_2/main.c
- @@ -1,4 +1,4 @@
- -#include studio.h
- +#include <studio.h>^M
- main{}
- (
- ```
- Зафиксируем изменение:
- ```
- $ git commit -m " <...> was added "
- [lab_01 8face43] <...> was added
- 1 file changed, 1 insertion(+), 1 deletion(-)
- ```
- Ошибка №3
- ```
- main.c:1:10: fatal error: studio.h: No such file or directory
- #include <studio.h>
- ^~~~~~~~~~
- compilation terminated.
- ```
- Ошибка №3: неправильное название директивы <stdio.h>
- Исправление:
- ```
- $ git diff
- diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
- index 7ec615c..aa78fa5 100644
- --- a/lab_01_2_2/main.c
- +++ b/lab_01_2_2/main.c
- @@ -1,4 +1,4 @@
- -#include <studio.h>
- +#include <stdio.h>^M
- main{}
- (
- ```
- Зафиксируем изменение:
- ```
- $ git commit -m " studio was replaced stdio"
- [lab_01 b9f5cf9] studio was replaced stdio
- 1 file changed, 1 insertion(+), 1 deletion(-)
- ```
- Ошибка №4
- ```
- main.c:3:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
- main{}
- ^
- main.c:5:5: error: expected identifier or '(' before 'int'
- int s;
- ^~~
- ```
- Ошибка №4 : неправильные скобки у функции main.
- Исправление:
- ```
- $ git diff
- diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
- index aa78fa5..8187126 100644
- --- a/lab_01_2_2/main.c
- +++ b/lab_01_2_2/main.c
- @@ -1,8 +1,8 @@
- #include <stdio.h>
- -main{}
- -(
- +main()^M
- +{^M
- int s;
- s: = 56;
- print (Year has s weeks)
- -)
- +}^M
- ```
- Зафиксируем изменения:
- ```
- $ git commit -m " main was fixed () and {} "
- [lab_01 ec6d830] main was fixed () and {}
- 1 file changed, 3 insertions(+), 3 deletions(-)
- ```
- Ошибка №5
- ```
- main.c:3:1: error: return type defaults to 'int' [-Werror=implicit-int]
- main()
- ^~~~
- ```
- Ошибка №5: не указан тип у функции main()
- Исправление:
- ```
- $ git diff
- diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
- index 8187126..f8c17fe 100644
- --- a/lab_01_2_2/main.c
- +++ b/lab_01_2_2/main.c
- @@ -1,8 +1,9 @@
- #include <stdio.h>
- -main()
- +int main()^M
- {
- int s;
- s: = 56;
- print (Year has s weeks)
- + return 0;^M
- }
- ```
- Зафиксируем изменения:
- ```
- $ git commit -m " int main() and return 0; was added"
- [lab_01 ce30e89] int main() and return 0; was added
- 1 file changed, 2 insertions(+), 1 deletion(-)
- ```
- Ошибка №6
- ```
- main.c:6:8: error: expected expression before '=' token
- s: = 56;
- ^
- ```
- Ошибка №6: неправильное присвоение переменной s.
- Исправление:
- ```
- $ git diff
- diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
- index f8c17fe..6a912a5 100644
- --- a/lab_01_2_2/main.c
- +++ b/lab_01_2_2/main.c
- @@ -3,7 +3,7 @@
- int main()
- {
- int s;
- - s: = 56;
- + s = 56;^M
- print (Year has s weeks)
- return 0;
- }
- ```
- Зафиксируем изменение:
- ```
- $ git commit -m " s:= was replaced s ="
- [lab_01 628df46] s:= was replaced s =
- 1 file changed, 1 insertion(+), 1 deletion(-)
- ```
- Ошибка №7
- ```
- main.c:7:5: error: implicit declaration of function 'print'; did you mean 'printf'? [-Werror=implicit-function-declaration]
- print (Year has s weeks)
- ^~~~~
- printf
- ```
- Ошибка №7: неправильно написан оператор printf().
- Исправление:
- ```
- $ git diff
- diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
- index 6a912a5..ad41665 100644
- --- a/lab_01_2_2/main.c
- +++ b/lab_01_2_2/main.c
- @@ -4,6 +4,6 @@ int main()
- {
- int s;
- s = 56;
- - print (Year has s weeks)
- + printf(Year has s weeks)^M
- return 0;
- }
- ```
- Зафиксируем изменение:
- ```
- $ git commit -m "true writted printf"
- [lab_01 0c3e689] true writted printf
- 1 file changed, 1 insertion(+), 1 deletion(-)
- ```
- Ошибка №8
- ```
- main.c:7:12: error: 'Year' undeclared (first use in this function); did you mean 'char'?
- printf(Year has s weeks)
- ^~~~
- char
- ```
- Ошибка №8: оператор printf() написан не по шаблону
- Исправление:
- ```
- $ git diff
- diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
- index ad41665..7d074bc 100644
- --- a/lab_01_2_2/main.c
- +++ b/lab_01_2_2/main.c
- @@ -4,6 +4,6 @@ int main()
- {
- int s;
- s = 56;
- - printf(Year has s weeks)
- + printf("Year has %d weeks", s)^M
- return 0;
- }
- ```
- Зафиксируем изменения:
- ```
- $ git commit -m "printf() was writted correctly"
- [lab_01 b442847] printf() was writted correctly
- 1 file changed, 1 insertion(+), 1 deletion(-)
- ```
- Ошибка №9
- ```
- main.c:7:35: error: expected ';' before 'return'
- printf("Year has %d weeks", s)
- ^
- ;
- return 0;
- ~~~~~~
- ```
- Ошибка №9: не стоит ; в конце строки
- Исправление:
- ```
- $ git diff
- diff --git a/lab_01_2_2/main.c b/lab_01_2_2/main.c
- index 7d074bc..568fb74 100644
- --- a/lab_01_2_2/main.c
- +++ b/lab_01_2_2/main.c
- @@ -4,6 +4,6 @@ int main()
- {
- int s;
- s = 56;
- - printf("Year has %d weeks", s)
- + printf("Year has %d weeks", s);^M
- return 0;
- }
- ```
- Зафиксируем изменения:
- ```
- $ git commit -m " ; was added before return "
- [lab_01 caa1af8] ; was added before return
- 1 file changed, 1 insertion(+), 1 deletion(-)
- ```
- Программа теперь полностью работает.
- Конечный код:
- ```
- #include <stdio.h>
- int main()
- {
- int s;
- s = 56;
- printf("Year has %d weeks", s);
- return 0;
- }
- ```
- # 3. Работа с QtCreator
- Для задач № 1,2,3,4 был создан отдельный проект в QtCreator. Покажу как создавать проект на примере задачи № 2.
- 1. Запустила QtCreator через оболочку MSYS.
- 2. В появившемся окне нажимаем создать новый проект.
- 3. Импортировать проект -> Импорт существующего проекта -> Даём название нашему проекту и указываем где он будет хранится.
- 4. В созданном проект добавляем новый файл.
- 5. Файл исходных текстов С++ -> указываем имя файла с расширением .с (в моем случае main.c).
- 6. Переходим во вкладку проекты и настраиваем следуюшие параметры:
- Для конфигурации Release:
- ![Снимок_экрана_2019-03-25_в_19.03.27](uploads/8190a6cbca1023f327e0f7ac2eaaf811/Снимок_экрана_2019-03-25_в_19.03.27.png)
- Копируем Release в конфигурацию Debug и добавляем еще один параметр:
- ![Снимок_экрана_2019-03-25_в_19.04.09](uploads/b2e8bf0ace8e0281b7c324dd6577f6cb/Снимок_экрана_2019-03-25_в_19.04.09.png)
- В запуске указываем наш файл и ставим галочку запускать в терминале:
- ![Снимок_экрана_2019-03-25_в_19.05.33](uploads/427e8feda4f75ce77243ae774c3d9333/Снимок_экрана_2019-03-25_в_19.05.33.png)
- Пишем код и запускаем программу:
- ![Снимок_экрана_2019-03-25_в_19.06.42](uploads/6e5a23a431bb430d3b2cec4d6f66534f/Снимок_экрана_2019-03-25_в_19.06.42.png)
- ![Снимок_экрана_2019-03-25_в_19.06.51](uploads/21f5d1e82bab62cf24e5565390e9cd1a/Снимок_экрана_2019-03-25_в_19.06.51.png)
- ## Работа с Debug
- Отличие Release от Debug, то что мы просто запускаем приложение без работы отладчика.
- Для того, чтобы запустить отладчик нужно перейти в конфигурацию Debug и нажать F5 или F10.
- Если нажать клавишу F10, то программа начнет пошаговую работу в отладчике с точки входа в программу, т.е с функции main.
- Для того, чтобы остановиться на конкретной строчке, где я подозреваю что у меня есть ошибка, я должен поставить точку остановы.
- Также если мы не хотим просматривать определенный кусок кода, мы можем поставить две точки остановы, и чтобы не идти по-шагово от одной точки к другой необходимо нажать клавишу F5.
- Также есть клавиша F11, которая производит шаг с заходом. Шаг с заходом нужен для того, чтобы посмотреть, что у нас происходит в функции, которую мы вызываем в main.
- Для того, чтобы завершить отладчик нужно нажать клавиши F5+Shift.
- # 4. Итог о проделанной работе
- 1. Исходный код лабораторной работы расположил в ветке lab_01, а каждую из задач в отдельной папке: lab_01_0_1, lab_01_0_2, lab_01_0_3, lab_01_0_4.
- 2. Исходный код соответствует правилам оформления исходного кода.
- 3. Для каждой задачи был создан отдельный проект в QT Creator. Для каждого проекта создал два варианта сборки: Debug (с отладочной информацией) и Release (без отладочной информации).
- 4. Для каждой задачи подготовил тестовые данные, которые демонстрируют правильность работы задач. Эти данные расположил в файле test.txt
- 5. Для реализации задач этой лабораторной работы мне понадобилась только функция main.
- 6. Данные вводятся строго в том порядке, в котором указано в задании.
- 7. Ответы выводятся строго в том порядке, в котором указано в задании.
- 8. Исходный код лабораторной работы поместил под версионный контроль. После того, как все задания были выполнены, в GitLab подготовил merge request для переноса изменений из ветки lab_01 в ветку master.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement