Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на С.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Как поделиться своей программой с друзьями.

Если вы попробуете открыть папку проекта и скопировать оттуда исполняемый файл (*.exe) вашей программы, то на другом компьютере этот файл работать не будет. Я просто покажу вам какие свойства проекта нужно поменять, не вдаваясь в нюансы, чтобы получившийся файл работал на другом компьютере.

Итак, открываем вкладку «Проект» -> «Свойства проекта» или используем комбинацию«Alt+F7». В левой части появившегося окна открываем вкладки «Свойства конфигурации» -> «С/С++» -> «Создание кода». В правой части в поле «Библиотека времени выполнения» выбираем параметр «Многопоточная (/MT)», после чего последовательно нажимаем кнопки «Применить» и«Ок».

Рис.4 Окно «Свойства прокета»

Теперь в главном окне в маленьком поле «Конфигурация решения» выбираем тип «Release».

Рис.5 Изменение конфигурации решения.

Осталось лишь заново скомпилировать наш проект. Вслед за этим в папке проекта появится папка, в которой будет находиться исполняемый файл, работающий на чужих компьютерах.

Практическое задание.

Написать программу-калькулятор комплексных чисел. Предусмотреть простенькое меню, возможность выполнения следющих действий: сложение, вычитание, умножение, деление двух комплексных чисел, нахождение модуля и аргумента комплексного числа. Кроме того, реализовать возможность сохранения результата в "памяти" (одна ячейка), на время выполнения программы. В программе рационально использовать возможности заголовочных файлов.

Дополнительные материалы к уроку.

  1. Текст урока в формате pdf.

  2. Архив с программой ConsolPassMan. Исходные коды, рабочая версия, инструкция по установке.

Занятие 22. Препроцессор. Директивы препроцессора.

Еще в самом первом уроке, я говорил вам, что когда компилятор встречает команду #include <stdio.h> он подставляет в это место содержимое файла stdio.h. На самом деле все немножко не так. Настал час, когда вас можно посвятить в эти тонкости, раньше они были излишними.

На самом деле, компилятор никакой строчки #include <stdio.h>никогда не встретит. Я уже упоминал, что процесс преобразования кода программы в исполняемый файл не так прост. Прежде чем передать код попадет к компилятору, его обрабатывает другая программа – препроцессор.

Препроцессор - это специальная программа, которая обрабатывает исходный код, прежде чем передать его компилятору.

Чем занимается препроцессор?

  • удаляет комментарии из кода

  • обрабатывает директивы препроцессора

Директивы препроцессора - это все те команды, которые начинаются с символа «#».

На данный момент вы знаете как минимум две такие команды#include и #define, хотя есть и другие.

Данный список неполный. Есть и другие действия, которые выполняет препроцессор, но я о них пока рассказывать не буду.

Как работает препроцессор?

В работе препроцессора важно понимать две вещи:

  • Препроцессор работает строго до компилятора

  • Препроцессор просто заменяет один текст – другим

Ему вообще наплевать на синтаксис и всякие условности. Он просматривает текст, и заменяет одни его кусочки другими.

Что и на что заменяется, вы уже должны знать, но я на всякий случай напомню.

В случае директивы #include <stdio.h> сама эта строка будет заменена препроцессором на содержимое файла stdio.h.

В случае директивы #define FJ 11 все вхождения FJ заменяются на11. Кстати, это тоже не единственный вариант использования директивы #define. Но мы пока что коснемся только этого варианта.

Стоит отметить, что если FJ встретиться внутри имени какой-нибудь переменной или в названии оператора, то она естественно ни на что не заменится. Например, если есть переменная с именем kFJ, то она так и останется kFJ а не станет после обработки препроцессоромk11.

Теперь разберем пример, который был в тесте в нашей группе во Вконтакте.

Сразу же скажу правильный ответ. Да, эта программа скомпилируется и будет работать.

Теперь разберемся, почему же она будет скомпилирована.

Как я понял, большинство смутило то, что переменная s89 не объявлена, что и должно было бы привести к ошибке компиляции. Но, теперь вооружившись знаниями о работе препроцессора, разберемся, что же, на самом деле, получает компилятор для обработки. Итак, сначала запускается препроцессор, который получает для обработки следующий код:

#include <stdio.h>

#define G s89

int main (){

char G =10;

s89=12;

// комментарий

printf("%d %d\n", s89, G);

return 0;

}

Препроцессор начинает обрабатывать этот код и буквально сразу же встречает директиву #include <stdio.h>. Для него, как мы уже знаем, это команда на то, чтобы вставить вместо этой строчки содержимое файла stdio.h. Вставляем. Получившийся код я сюда выписывать не буду, иначе это займет очень много места.

Препроцессор продолжает обработку файла и встречает команду#define G s89. Это как мы знаем, команда на то, чтобы заменить G наs89.

После замены получим следующий код. (ниже приведен код только для функции main)

int main (){

char s89 =10;

s89=12;

printf("%d %d\n", s89, s89);

return 0;

}

Ну и походу дела, препроцессор удалит комментарий из программы, а точнее заменит его пустой строчкой.

Вот, в принципе, мы и ответили на вопрос: «Почему программа компилируется?»

Хоть многих и смутило, что в ней отсутствует переменная s89, разобравшись обстоятельно, видим, что она-то как раз есть, а вот переменной G нет. Именно такой код поступит на компиляцию. Нетрудно видеть, что он корректный.