интерфейс для отладчика GNU.

Dev-C++ предлагает неполный графический интерфейс для многочисленных опций командной строки GCC: во многих случаях пользователи должны настраивать свои проекты, вводя в текстовые поля опции командной строки. Кроме того, его менеджер проектов может управлять только одним проектом, а визуальный отладчик ненадежен. Несмотря на эти ограничения, Dev-C++ поддерживается большим сообществом пользователей, включая студентов многих университетов. Это хорошая среда для того, кто хочет изучить С++, но не имеет никаких инструментов для разработки на С++.

John, Paul, George, and Ringo

Co времен, когда в 1978 году Брайан Керниган (Brian Kernighan) и Деннис Ритчи (Dennis Ritchie) опубликовали книгу The С Programming Language (Язык программирования С), стало традицией начинать изучение нового языка программирования с написания, компиляции и запуска небольшой программки, которая печатает в консоли «Hello, World!» («Привет, мир!»). Так как эта глава описывает статические и динамические библиотеки, а также исполняемые файлы, мне потребуется несколько более сложный пример.

Примеры 1.1, 1.2 и 1.3 представляют исходный код приложения hellobeatles, которое выводит текст

John, Paul, George, and Ringo

на консоль. Это приложение можно написать в виде единого исходного файла, но я разбил его на три модуля: статическую библиотеку libjohnpaul, динамическую библиотеку libgeorgeringo и исполняемый файл hellobeatles. Более того, хотя каждая из этих библиотек могла бы быть легко реализована как один заголовочный файл и один файл .cpp, я, чтобы проиллюстрировать компиляцию и компоновку проектов, содержащих более одного исходного файла, разбил реализацию на несколько исходных файлов.

Прежде чем вы начнете прорабатывать рецепты в этой главе, создайте четыре расположенные на одном уровне директории johnpaul, georgeringo, hellobeatles и binaries. В первые три директории поместите исходные файлы из примеров 1.1, 1.2 и 1.3. Четвертая директория будет использоваться для двоичных файлов, генерируемых IDE.

Исходный код libjohnpaul представлен в примере 1.1. Открытый интерфейс libjohnpaul состоит из одной функции johnpaul(), объявленной в заголовочном файле johnpaul.hpp. Функция johnpaul() отвечает за печать:

John, Paul,

на консоль. Реализация johnpaul() разбита на два. исходных файла — john.cpp и paul.cpp, каждый из которых отвечает за печать одного имени.

Пример 1.1. Исходный код libjohnpaul

johnpaul/john.hpp

#ifndef JOHN_HPP_INCLUDED

#define JOHN_HPP_INCLUDED

void john(); // Печатает 'John, '

#endif // JOHN _HPP_INCLUDED

johnpaul/john.cpp

#include <iostream>

#include 'john.hpp'

void john() {

 std::cout << 'John, ';

}

johnpaul/paul.hpp

#ifndef PAUL_HPP_INCLUDED

#define PAUL_HPP_INCLUDED

void paul(); // Печатает ' Paul, '

#endif // PAUL_HPP_INCLUDED

johnpaul/paul.cpp

#include <iostream>

#include 'paul.hpp'

void paul() {

 std::cout << 'Paul, ';

}

johnpaul/johnpaul.hpp

#ifndef JOHNPAUL_HPP_INCLUDED

#define JOHNPAUL_HPP_INCLUDED

void johnpaul(); // Печатает 'John, Paul, '

#endif // JOHNPAUL_HPP_INCLUDED

johnpaul/johnpaul.cpp

#include 'john.hpp'

#include 'paul.hpp'

#include 'johnpaul.hpp'

void johnpaul() {

 john();

 paul();

}

Исходный код libgeorgeringo представлен в примере 1.2. Открытый интерфейс libgeorgeringo состоит из одной функции georgeringo(), объявленной в заголовочном файле georgeringo.hpp. Как вы могли догадаться, функция georgeringo() отвечает за печать:

George, and Ringo

на консоль. И снова реализация georgeringo() разделена на два исходных файла — george.cpp и ringo.cpp.

Пример 1.2. Исходный код libgeorgeringo

georgeringo/george.hpp

#ifndef GEORGE_HPP_INCLUDED

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату